From 01c8fc440f4c71b4862e1d81eef83baa66d1a71e Mon Sep 17 00:00:00 2001 From: zaeema-n Date: Tue, 23 Jun 2026 14:00:20 +0530 Subject: [PATCH 01/12] Add domain discovery and resolution functionality --- pyproject.toml | 1 + src/websitescorecard/discovery.py | 103 ++++++++++++++++ src/websitescorecard/resolve_runner.py | 156 +++++++++++++++++++++++++ tests/test_discovery.py | 102 ++++++++++++++++ 4 files changed, 362 insertions(+) create mode 100644 src/websitescorecard/discovery.py create mode 100644 src/websitescorecard/resolve_runner.py create mode 100644 tests/test_discovery.py diff --git a/pyproject.toml b/pyproject.toml index d1686c5..eb1dbfe 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,6 +10,7 @@ readme = "README.md" license = "Apache-2.0" requires-python = ">=3.10" dependencies = [ + "duckduckgo-search>=6.0.0", "typer[all]>=0.12.0", "rich>=13.0.0", ] diff --git a/src/websitescorecard/discovery.py b/src/websitescorecard/discovery.py new file mode 100644 index 0000000..8aa074f --- /dev/null +++ b/src/websitescorecard/discovery.py @@ -0,0 +1,103 @@ +"""Domain discovery via web search.""" + +from __future__ import annotations + +from collections.abc import Iterable, Sequence + +from duckduckgo_search import DDGS + +from websitescorecard.url_utils import parse_url + +OVERSAMPLE_FACTOR = 5 + + +def normalize_suffixes(suffixes: Sequence[str] | None) -> list[str] | None: + """Normalize suffixes: strip dots, lowercase, dedupe, longest-first.""" + if suffixes is None: + return None + + normalized: list[str] = [] + for suffix in suffixes: + cleaned = suffix.strip().lower().lstrip(".") + if cleaned: + normalized.append(cleaned) + + if not normalized: + return None + + return sorted(set(normalized), key=len, reverse=True) + + +def matches_suffix(hostname: str, suffixes: Sequence[str] | None) -> bool: + """Return True if hostname matches any allowed suffix.""" + if not suffixes: + return True + + host = hostname.lower().rstrip(".") + normalized = normalize_suffixes(suffixes) + if not normalized: + return True + + for suffix in normalized: + if host == suffix or host.endswith("." + suffix): + return True + return False + + +def extract_hostname(url: str) -> str | None: + """Extract registrable hostname from a URL, stripping www.""" + try: + parsed = parse_url(url) + except ValueError: + return None + + hostname = parsed.hostname.lower() + if hostname.startswith("www."): + hostname = hostname[4:] + return hostname + + +def hostnames_from_results( + results: Iterable[dict[str, str]], + *, + suffixes: Sequence[str] | None = None, +) -> list[str]: + """Extract unique hostnames from search results, optionally filtered by suffix.""" + seen: set[str] = set() + hostnames: list[str] = [] + + for result in results: + href = result.get("href") or result.get("url") or "" + hostname = extract_hostname(href) + if not hostname or hostname in seen: + continue + if not matches_suffix(hostname, suffixes): + continue + seen.add(hostname) + hostnames.append(hostname) + + return hostnames + + +def search_domains( + query: str, + *, + limit: int = 1, + suffixes: Sequence[str] | None = None, + oversample_factor: int = OVERSAMPLE_FACTOR, + timeout: int | None = None, +) -> list[str]: + """Search for domains matching a query, filtered by optional hostname suffixes.""" + if limit < 1: + return [] + + max_results = max(limit * oversample_factor, limit) + ddgs_kwargs: dict[str, int] = {} + if timeout is not None: + ddgs_kwargs["timeout"] = timeout + + with DDGS(**ddgs_kwargs) as ddgs: + results = ddgs.text(query, max_results=max_results) + + hostnames = hostnames_from_results(results, suffixes=suffixes) + return hostnames[:limit] diff --git a/src/websitescorecard/resolve_runner.py b/src/websitescorecard/resolve_runner.py new file mode 100644 index 0000000..39208db --- /dev/null +++ b/src/websitescorecard/resolve_runner.py @@ -0,0 +1,156 @@ +"""Orchestrates resolving institution names to domains via web search.""" + +from __future__ import annotations + +import time +from concurrent.futures import ThreadPoolExecutor, as_completed +from dataclasses import dataclass +from pathlib import Path + +from rich.progress import BarColumn, Progress, TaskProgressColumn, TextColumn, TimeElapsedColumn + +from websitescorecard.csv_io import read_csv, write_csv +from websitescorecard.discovery import search_domains + +LOOKUP_STATUS_COL = "lookup_status" +LOOKUP_ERROR_COL = "lookup_error" + + +@dataclass +class ResolveConfig: + input_path: Path + output_path: Path + name_column: str + url_column: str = "URL" + limit: int = 1 + suffixes: list[str] | None = None + query_suffix: str = "Sri Lanka" + concurrency: int = 1 + delay: float = 1.0 + timeout: int | None = None + + +def _url_columns(url_column: str, limit: int) -> list[str]: + columns = [url_column] + for i in range(2, limit + 1): + columns.append(f"url_{i}") + return columns + + +def _output_columns(original: list[str], url_cols: list[str]) -> list[str]: + columns = list(original) + for col in url_cols: + if col not in columns: + columns.append(col) + for col in (LOOKUP_STATUS_COL, LOOKUP_ERROR_COL): + if col not in columns: + columns.append(col) + return columns + + +def _has_existing_url(row: dict[str, str], url_column: str) -> bool: + return bool(row.get(url_column, "").strip()) + + +def _ensure_resolve_columns(row: dict[str, str], url_cols: list[str]) -> dict[str, str]: + enriched = dict(row) + for col in url_cols: + enriched.setdefault(col, "") + enriched.setdefault(LOOKUP_STATUS_COL, "") + enriched.setdefault(LOOKUP_ERROR_COL, "") + return enriched + + +def _resolve_row( + index: int, + row: dict[str, str], + *, + name_column: str, + url_columns: list[str], + suffixes: list[str] | None, + query_suffix: str, + limit: int, + delay: float, + timeout: int | None, +) -> tuple[int, dict[str, str]]: + if _has_existing_url(row, url_columns[0]): + return index, _ensure_resolve_columns(row, url_columns) + + name = row.get(name_column, "").strip() + if not name: + enriched = _ensure_resolve_columns(row, url_columns) + enriched[LOOKUP_STATUS_COL] = "error" + enriched[LOOKUP_ERROR_COL] = f"Empty value in {name_column!r}" + return index, enriched + + query = f"{name} {query_suffix}".strip() + enriched = _ensure_resolve_columns(row, url_columns) + + try: + domains = search_domains( + query, + limit=limit, + suffixes=suffixes, + timeout=timeout, + ) + if domains: + enriched[LOOKUP_STATUS_COL] = "ok" + enriched[LOOKUP_ERROR_COL] = "" + for col, domain in zip(url_columns, domains, strict=False): + enriched[col] = domain + else: + enriched[LOOKUP_STATUS_COL] = "no_results" + enriched[LOOKUP_ERROR_COL] = "" + except Exception as exc: + enriched[LOOKUP_STATUS_COL] = "error" + enriched[LOOKUP_ERROR_COL] = str(exc) + + if delay > 0: + time.sleep(delay) + + return index, enriched + + +def run_resolve(config: ResolveConfig) -> None: + original_columns, rows = read_csv(config.input_path) + + if config.name_column not in original_columns: + raise ValueError( + f"Column {config.name_column!r} not found in CSV. " + f"Available columns: {', '.join(original_columns)}" + ) + + url_cols = _url_columns(config.url_column, config.limit) + output_columns = _output_columns(original_columns, url_cols) + enriched_rows: list[dict[str, str] | None] = [None] * len(rows) + + with Progress( + TextColumn("[progress.description]{task.description}"), + BarColumn(), + TaskProgressColumn(), + TimeElapsedColumn(), + ) as progress: + task = progress.add_task("Resolving domains...", total=len(rows)) + + with ThreadPoolExecutor(max_workers=config.concurrency) as executor: + futures = { + executor.submit( + _resolve_row, + i, + row, + name_column=config.name_column, + url_columns=url_cols, + suffixes=config.suffixes, + query_suffix=config.query_suffix, + limit=config.limit, + delay=config.delay, + timeout=config.timeout, + ): i + for i, row in enumerate(rows) + } + for future in as_completed(futures): + index, enriched = future.result() + enriched_rows[index] = enriched + progress.advance(task) + + write_csv(config.output_path, output_columns, enriched_rows) # type: ignore[arg-type] diff --git a/tests/test_discovery.py b/tests/test_discovery.py new file mode 100644 index 0000000..2ea9cca --- /dev/null +++ b/tests/test_discovery.py @@ -0,0 +1,102 @@ +"""Tests for domain discovery.""" + +from unittest.mock import MagicMock, patch + +import pytest + +from websitescorecard.discovery import ( + extract_hostname, + hostnames_from_results, + matches_suffix, + normalize_suffixes, + search_domains, +) + + +@pytest.mark.parametrize( + ("hostname", "suffixes", "expected"), + [ + ("treasury.gov.lk", ["gov.lk", "gov"], True), + ("treasury.gov.lk", ["gov"], False), + ("defence.gov", ["gov"], True), + ("defence.gov", ["gov.lk"], False), + ("evil.gov.attacker.com", ["gov"], False), + ("notgov.com", ["gov"], False), + ("gov.lk", ["gov.lk"], True), + ("www.example.gov.lk", ["gov.lk"], True), + ], +) +def test_matches_suffix(hostname, suffixes, expected): + assert matches_suffix(hostname, suffixes) is expected + + +def test_matches_suffix_none_suffixes_accepts_all(): + assert matches_suffix("anything.com", None) is True + + +def test_normalize_suffixes_longest_first(): + assert normalize_suffixes(["gov", "gov.lk", ".GOV.LK"]) == ["gov.lk", "gov"] + + +def test_normalize_suffixes_empty_returns_none(): + assert normalize_suffixes([]) is None + assert normalize_suffixes(["", " "]) is None + + +@pytest.mark.parametrize( + ("url", "expected"), + [ + ("https://www.treasury.gov.lk/about", "treasury.gov.lk"), + ("http://defence.gov", "defence.gov"), + ("treasury.gov.lk", "treasury.gov.lk"), + ("https://example.com:8443/path", "example.com"), + ("://bad", None), + ("", None), + ], +) +def test_extract_hostname(url, expected): + assert extract_hostname(url) == expected + + +def test_hostnames_from_results_dedupes_and_filters(): + results = [ + {"href": "https://www.treasury.gov.lk/"}, + {"href": "https://treasury.gov.lk/page"}, + {"href": "https://en.wikipedia.org/wiki/Treasury"}, + {"href": "https://defence.gov.lk/"}, + {"href": "https://news.site.com/story"}, + ] + + assert hostnames_from_results(results, suffixes=["gov.lk", "gov"]) == [ + "treasury.gov.lk", + "defence.gov.lk", + ] + + +@patch("websitescorecard.discovery.DDGS") +def test_search_domains_filters_and_limits(mock_ddgs_cls): + mock_ddgs = MagicMock() + mock_ddgs.__enter__.return_value = mock_ddgs + mock_ddgs.text.return_value = [ + {"href": "https://www.treasury.gov.lk/"}, + {"href": "https://en.wikipedia.org/wiki/Treasury"}, + {"href": "https://defence.gov.lk/"}, + {"href": "https://finance.gov.lk/"}, + ] + mock_ddgs_cls.return_value = mock_ddgs + + domains = search_domains( + "Ministry of Finance Sri Lanka", + limit=2, + suffixes=["gov.lk"], + oversample_factor=2, + ) + + assert domains == ["treasury.gov.lk", "defence.gov.lk"] + mock_ddgs.text.assert_called_once_with("Ministry of Finance Sri Lanka", max_results=4) + + +@patch("websitescorecard.discovery.DDGS") +def test_search_domains_zero_limit_returns_empty(mock_ddgs_cls): + assert search_domains("query", limit=0) == [] + mock_ddgs_cls.assert_not_called() From 3327c302683644ec7144a1397e6054fad94a21fa Mon Sep 17 00:00:00 2001 From: zaeema-n Date: Tue, 23 Jun 2026 14:07:01 +0530 Subject: [PATCH 02/12] Add resolve command to CLI for institution name to domain resolution with enhanced CSV output options --- src/websitescorecard/cli.py | 85 +++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/src/websitescorecard/cli.py b/src/websitescorecard/cli.py index de1b235..69d5efc 100644 --- a/src/websitescorecard/cli.py +++ b/src/websitescorecard/cli.py @@ -10,6 +10,7 @@ from websitescorecard import __version__ from websitescorecard.checks import CHECK_REGISTRY, resolve_checks +from websitescorecard.resolve_runner import ResolveConfig, run_resolve from websitescorecard.runner import ScanConfig, run_scan app = typer.Typer( @@ -24,6 +25,15 @@ def _default_output_path(input_csv: Path) -> Path: return input_csv.with_name(f"{input_csv.stem}_scored{input_csv.suffix}") +def _default_resolve_output_path(input_csv: Path) -> Path: + return input_csv.with_name(f"{input_csv.stem}_resolved{input_csv.suffix}") + + +def _parse_suffixes(suffixes: str) -> list[str] | None: + parsed = [part.strip() for part in suffixes.split(",") if part.strip()] + return parsed or None + + def _collect_check_names(checks: str) -> list[str]: return [name.strip().lower() for name in checks.split(",") if name.strip()] @@ -91,6 +101,81 @@ def scan( console.print(f"[green]Done.[/green] Wrote {len(enabled_checks)} check(s) to {output_path}") +@app.command("resolve") +def resolve( + input_csv: Annotated[Path, typer.Argument(help="Input CSV file path")], + column: Annotated[ + str, + typer.Option("-c", "--column", help="CSV column with institution/department names"), + ], + output: Annotated[ + Optional[Path], + typer.Option("-o", "--output", help="Output CSV file path"), + ] = None, + limit: Annotated[ + int, typer.Option("--limit", help="Max domains to keep per row") + ] = 1, + suffixes: Annotated[ + str, + typer.Option( + "--suffixes", + help="Comma-separated hostname suffixes to allow (e.g. gov.lk,gov)", + ), + ] = "", + query_suffix: Annotated[ + str, + typer.Option("--query-suffix", help="Text appended to every search query"), + ] = "Sri Lanka", + url_column: Annotated[ + str, + typer.Option("--url-column", help="Column name for the first result URL"), + ] = "URL", + concurrency: Annotated[ + int, typer.Option("--concurrency", help="Number of parallel workers") + ] = 1, + delay: Annotated[ + float, + typer.Option("--delay", help="Seconds to wait between searches per worker"), + ] = 1.0, + timeout: Annotated[ + Optional[float], + typer.Option("--timeout", help="HTTP timeout for search requests in seconds"), + ] = None, +) -> None: + """Resolve institution names to domains via web search and write an enriched CSV.""" + if not input_csv.exists(): + console.print(f"[red]Error:[/red] Input file not found: {input_csv}") + raise typer.Exit(code=1) + + if limit < 1: + console.print("[red]Error:[/red] --limit must be at least 1.") + raise typer.Exit(code=1) + + output_path = output or _default_resolve_output_path(input_csv) + timeout_seconds = int(timeout) if timeout is not None else None + + config = ResolveConfig( + input_path=input_csv, + output_path=output_path, + name_column=column, + url_column=url_column, + limit=limit, + suffixes=_parse_suffixes(suffixes), + query_suffix=query_suffix, + concurrency=concurrency, + delay=delay, + timeout=timeout_seconds, + ) + + try: + run_resolve(config) + except ValueError as exc: + console.print(f"[red]Error:[/red] {exc}") + raise typer.Exit(code=1) from exc + + console.print(f"[green]Done.[/green] Wrote resolved domains to {output_path}") + + @app.command("version") def version_cmd() -> None: """Show the installed version.""" From df4a040129f02eef6a9a09a5f8a2389aa5609172 Mon Sep 17 00:00:00 2001 From: zaeema-n Date: Tue, 23 Jun 2026 14:14:32 +0530 Subject: [PATCH 03/12] Add unit tests for resolve runner functionality --- tests/test_resolve_runner.py | 220 +++++++++++++++++++++++++++++++++++ 1 file changed, 220 insertions(+) create mode 100644 tests/test_resolve_runner.py diff --git a/tests/test_resolve_runner.py b/tests/test_resolve_runner.py new file mode 100644 index 0000000..642eace --- /dev/null +++ b/tests/test_resolve_runner.py @@ -0,0 +1,220 @@ +"""Tests for resolve runner.""" + +from __future__ import annotations + +from pathlib import Path +from unittest.mock import patch + +import pytest + +from websitescorecard.csv_io import read_csv +from websitescorecard.resolve_runner import ( + LOOKUP_ERROR_COL, + LOOKUP_STATUS_COL, + ResolveConfig, + _url_columns, + run_resolve, +) + + +def test_url_columns_limit_1(): + assert _url_columns("URL", 1) == ["URL"] + + +def test_url_columns_limit_3(): + assert _url_columns("URL", 3) == ["URL", "url_2", "url_3"] + + +def test_url_columns_custom_primary(): + assert _url_columns("website", 2) == ["website", "url_2"] + + +@patch("websitescorecard.resolve_runner.search_domains") +def test_run_resolve_limit_1(mock_search, tmp_path: Path): + def fake_search(query: str, **kwargs): + if "Finance" in query: + return ["treasury.gov.lk"] + if "Defence" in query: + return ["defence.gov.lk"] + return [] + + mock_search.side_effect = fake_search + + input_csv = tmp_path / "input.csv" + output_csv = tmp_path / "output.csv" + input_csv.write_text( + "Institution Name\nMinistry of Finance\nMinistry of Defence\n", + encoding="utf-8", + ) + + config = ResolveConfig( + input_path=input_csv, + output_path=output_csv, + name_column="Institution Name", + limit=1, + suffixes=["gov.lk"], + delay=0, + ) + + run_resolve(config) + + columns, rows = read_csv(output_csv) + assert columns == ["Institution Name", "URL", LOOKUP_STATUS_COL, LOOKUP_ERROR_COL] + assert rows[0] == { + "Institution Name": "Ministry of Finance", + "URL": "treasury.gov.lk", + LOOKUP_STATUS_COL: "ok", + LOOKUP_ERROR_COL: "", + } + assert rows[1]["URL"] == "defence.gov.lk" + assert rows[1][LOOKUP_STATUS_COL] == "ok" + assert mock_search.call_count == 2 + + +@patch("websitescorecard.resolve_runner.search_domains") +def test_run_resolve_limit_3(mock_search, tmp_path: Path): + mock_search.return_value = ["first.gov.lk", "second.gov.lk", "third.gov.lk"] + + input_csv = tmp_path / "input.csv" + output_csv = tmp_path / "output.csv" + input_csv.write_text("Institution Name\nMinistry A\n", encoding="utf-8") + + config = ResolveConfig( + input_path=input_csv, + output_path=output_csv, + name_column="Institution Name", + limit=3, + delay=0, + ) + + run_resolve(config) + + columns, rows = read_csv(output_csv) + assert columns == [ + "Institution Name", + "URL", + "url_2", + "url_3", + LOOKUP_STATUS_COL, + LOOKUP_ERROR_COL, + ] + row = rows[0] + assert row["URL"] == "first.gov.lk" + assert row["url_2"] == "second.gov.lk" + assert row["url_3"] == "third.gov.lk" + assert row[LOOKUP_STATUS_COL] == "ok" + assert row[LOOKUP_ERROR_COL] == "" + + +@patch("websitescorecard.resolve_runner.search_domains") +def test_run_resolve_skips_existing_url(mock_search, tmp_path: Path): + input_csv = tmp_path / "input.csv" + output_csv = tmp_path / "output.csv" + input_csv.write_text( + "Institution Name,URL\nMinistry of Finance,manual.gov.lk\nMinistry of Defence,\n", + encoding="utf-8", + ) + mock_search.return_value = ["defence.gov.lk"] + + config = ResolveConfig( + input_path=input_csv, + output_path=output_csv, + name_column="Institution Name", + limit=1, + delay=0, + ) + + run_resolve(config) + + _, rows = read_csv(output_csv) + assert rows[0]["URL"] == "manual.gov.lk" + assert rows[0][LOOKUP_STATUS_COL] == "" + assert rows[1]["URL"] == "defence.gov.lk" + assert rows[1][LOOKUP_STATUS_COL] == "ok" + mock_search.assert_called_once() + + +@patch("websitescorecard.resolve_runner.search_domains") +def test_run_resolve_no_results(mock_search, tmp_path: Path): + mock_search.return_value = [] + + input_csv = tmp_path / "input.csv" + output_csv = tmp_path / "output.csv" + input_csv.write_text("Institution Name\nUnknown Body\n", encoding="utf-8") + + config = ResolveConfig( + input_path=input_csv, + output_path=output_csv, + name_column="Institution Name", + limit=1, + delay=0, + ) + + run_resolve(config) + + _, rows = read_csv(output_csv) + assert rows[0]["URL"] == "" + assert rows[0][LOOKUP_STATUS_COL] == "no_results" + assert rows[0][LOOKUP_ERROR_COL] == "" + + +@patch("websitescorecard.resolve_runner.search_domains") +def test_run_resolve_search_error(mock_search, tmp_path: Path): + mock_search.side_effect = RuntimeError("search failed") + + input_csv = tmp_path / "input.csv" + output_csv = tmp_path / "output.csv" + input_csv.write_text("Institution Name\nMinistry A\n", encoding="utf-8") + + config = ResolveConfig( + input_path=input_csv, + output_path=output_csv, + name_column="Institution Name", + limit=1, + delay=0, + ) + + run_resolve(config) + + _, rows = read_csv(output_csv) + assert rows[0]["URL"] == "" + assert rows[0][LOOKUP_STATUS_COL] == "error" + assert rows[0][LOOKUP_ERROR_COL] == "search failed" + + +def test_run_resolve_empty_name_records_error(tmp_path: Path): + input_csv = tmp_path / "input.csv" + output_csv = tmp_path / "output.csv" + input_csv.write_text("Institution Name\n \n", encoding="utf-8") + + config = ResolveConfig( + input_path=input_csv, + output_path=output_csv, + name_column="Institution Name", + limit=1, + delay=0, + ) + + with patch("websitescorecard.resolve_runner.search_domains") as mock_search: + run_resolve(config) + mock_search.assert_not_called() + + _, rows = read_csv(output_csv) + assert rows[0][LOOKUP_STATUS_COL] == "error" + assert "Empty value" in rows[0][LOOKUP_ERROR_COL] + + +def test_run_resolve_missing_column_raises(tmp_path: Path): + input_csv = tmp_path / "input.csv" + output_csv = tmp_path / "output.csv" + input_csv.write_text("name\nAcme\n", encoding="utf-8") + + config = ResolveConfig( + input_path=input_csv, + output_path=output_csv, + name_column="Institution Name", + delay=0, + ) + + with pytest.raises(ValueError, match="Institution Name"): + run_resolve(config) From f7e059e123949fc15a6d35fcaa4c023a2bdaac44 Mon Sep 17 00:00:00 2001 From: zaeema-n Date: Tue, 23 Jun 2026 14:28:40 +0530 Subject: [PATCH 04/12] Update README.md to include detailed instructions for the new `resolve` command --- README.md | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 01ee4d5..5ce5beb 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # WebsiteScorecard -CLI to scan websites from a CSV and enrich rows with check results (SSL certificate status, and more over time). +CLI to scan websites from a CSV and enrich rows with check results (SSL certificate status, and more over time). Use the `resolve` command first when your CSV has institution names but no URLs. ## Prerequisites @@ -79,8 +79,42 @@ Ministry,Ministry of Digital Economy,midec.gov.lk,valid, The `ssl_error` column contains the underlying error message when something went wrong. For scorecard reporting, `expired` and `invalid` can be grouped as cert problems; `unreachable` rows can be flagged separately for CSV cleanup. +## Resolve names to domains + +If your CSV has institution or department **names** but no URLs, use `resolve` to look up official domains via web search before running `scan`. **Resolve is not a check** — it does not appear in `--checks` and is not registered alongside checks like `ssl`. Checks run against URLs you already have; resolve is a pre-scan step that adds URL column(s) from names. + +Typical two-step workflow: + +```bash +# 1. Resolve names → domains (gov.lk and .gov only, keep up to 3 per row) +websitescorecard resolve bodies.csv -c "Institution Name" \ + --suffixes gov.lk,gov --limit 3 -o bodies_with_urls.csv + +# 2. Scan the first URL column +websitescorecard scan bodies_with_urls.csv -c URL --checks ssl +``` + +`resolve` searches DuckDuckGo for `"{name} {query_suffix}"` (default query suffix: `Sri Lanka`), extracts hostnames from results, optionally filters by hostname suffix, and writes an enriched CSV. All original columns are preserved. + +**Output columns:** + +- `--limit 1` (default) → single column `URL` (or the name you set with `--url-column`) +- `--limit 3` → `URL`, `url_2`, `url_3` (the first column is the primary one for `scan`) +- `lookup_status` — `ok`, `no_results`, or `error` +- `lookup_error` — detail when status is `error` + +Cells are left empty when fewer than N suffix-matching domains are found. + +**Skipping lookups:** If a row already has a value in the primary URL column, resolve leaves it unchanged (useful for manual overrides in a partially filled CSV). + +**Re-running:** Each run hits the search API again; there is no cache in v1. + +For a large batch (e.g. ~470 rows), use conservative settings to avoid rate limits: `--concurrency 1` (default) and `--delay 1.0` (default) imply roughly 8+ minutes minimum. + ## CLI reference +### `scan` + ```bash websitescorecard scan INPUT_CSV -c COLUMN [OPTIONS] ``` @@ -107,6 +141,36 @@ websitescorecard scan --help At least one check must be specified via `--checks`. Running with an empty value prints an error. +### `resolve` + +```bash +websitescorecard resolve INPUT_CSV -c COLUMN [OPTIONS] +``` + +| Flag | Description | +|------|-------------| +| `INPUT_CSV` | Input CSV file path | +| `-c, --column` | Column with institution/department **names** (**required**) | +| `-o, --output` | Output path (default: `{input}_resolved.csv`) | +| `--limit` | Max domains to keep per row (default: `1`) | +| `--suffixes` | Comma-separated hostname suffixes to allow (e.g. `gov.lk,gov`) | +| `--query-suffix` | Text appended to every search query (default: `Sri Lanka`) | +| `--url-column` | Column name for the first result (default: `URL`) | +| `--concurrency` | Parallel workers (default: `1`) | +| `--delay` | Seconds to wait between searches per worker (default: `1.0`) | +| `--timeout` | HTTP timeout for search requests in seconds | + +Examples: + +```bash +# Resolve with suffix filter and multiple URLs per row +websitescorecard resolve bodies.csv -c "Institution Name" \ + --suffixes gov.lk,gov --limit 3 -o bodies_with_urls.csv + +# View all options +websitescorecard resolve --help +``` + ## Development Activate the virtual environment, then run tests: @@ -118,6 +182,8 @@ pytest ## Adding a new check +Checks are separate from domain lookup (`resolve`). To add a check that runs against URLs during `scan`: + 1. Create `src/websitescorecard/checks/your_check.py` implementing the `Check` protocol. 2. Register it in `src/websitescorecard/checks/__init__.py`. 3. Run it via `--checks` (comma-separated for multiple checks). From a16cead7be71471c0af8be742a3d9e8108ab0eb8 Mon Sep 17 00:00:00 2001 From: zaeema-n Date: Wed, 24 Jun 2026 10:42:01 +0530 Subject: [PATCH 05/12] Update dependencies in pyproject.toml, modify README for file paths, and add test-run script with example queries --- README.md | 10 +++++----- data/bodies.csv | 15 +++++++++++++++ pyproject.toml | 2 +- src/websitescorecard/discovery.py | 14 ++++++++++++-- test-run.py | 10 ++++++++++ 5 files changed, 43 insertions(+), 8 deletions(-) create mode 100644 data/bodies.csv create mode 100644 test-run.py diff --git a/README.md b/README.md index 5ce5beb..d3af53a 100644 --- a/README.md +++ b/README.md @@ -87,11 +87,11 @@ Typical two-step workflow: ```bash # 1. Resolve names → domains (gov.lk and .gov only, keep up to 3 per row) -websitescorecard resolve bodies.csv -c "Institution Name" \ - --suffixes gov.lk,gov --limit 3 -o bodies_with_urls.csv +websitescorecard resolve data/bodies.csv -c "Institution Name" \ + --suffixes gov.lk,lk --limit 3 -o data/bodies_with_urls.csv # 2. Scan the first URL column -websitescorecard scan bodies_with_urls.csv -c URL --checks ssl +websitescorecard scan data/bodies_with_urls.csv -c URL --checks ssl ``` `resolve` searches DuckDuckGo for `"{name} {query_suffix}"` (default query suffix: `Sri Lanka`), extracts hostnames from results, optionally filters by hostname suffix, and writes an enriched CSV. All original columns are preserved. @@ -164,8 +164,8 @@ Examples: ```bash # Resolve with suffix filter and multiple URLs per row -websitescorecard resolve bodies.csv -c "Institution Name" \ - --suffixes gov.lk,gov --limit 3 -o bodies_with_urls.csv +websitescorecard resolve data/bodies.csv -c "Institution Name" \ + --suffixes gov.lk,lk --limit 3 -o data/bodies_with_urls.csv # View all options websitescorecard resolve --help diff --git a/data/bodies.csv b/data/bodies.csv new file mode 100644 index 0000000..eaa3522 --- /dev/null +++ b/data/bodies.csv @@ -0,0 +1,15 @@ +"Institution Name" +Agriculture and Agrarian Insurance Board +Central Engineering Consultancy Bureau and its subsidiaries and affiliated companies +Department of Agrarian Development +Department of Agriculture +Department of Animal Production and Health +Department of Cinnamon Development +Department of Export Agriculture +Department of Irrigation +Department of Land Commissioner General +Department of Land Title Settlement +Department of Land Use Policy Planning +Hector Kobbekaduwa Agrarian Research and Training Institute +Institute of Surveying and Mapping +Land Acquisition Board of Review \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index eb1dbfe..9800101 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ readme = "README.md" license = "Apache-2.0" requires-python = ">=3.10" dependencies = [ - "duckduckgo-search>=6.0.0", + "ddgs>=9.0.0", "typer[all]>=0.12.0", "rich>=13.0.0", ] diff --git a/src/websitescorecard/discovery.py b/src/websitescorecard/discovery.py index 8aa074f..e5961e6 100644 --- a/src/websitescorecard/discovery.py +++ b/src/websitescorecard/discovery.py @@ -4,7 +4,7 @@ from collections.abc import Iterable, Sequence -from duckduckgo_search import DDGS +from ddgs import DDGS from websitescorecard.url_utils import parse_url @@ -97,7 +97,17 @@ def search_domains( ddgs_kwargs["timeout"] = timeout with DDGS(**ddgs_kwargs) as ddgs: - results = ddgs.text(query, max_results=max_results) + results = list(ddgs.text(query, max_results=max_results)) + + print(f"[ddgs] query: {query!r} (max_results={max_results})") + if results: + for i, result in enumerate(results, 1): + href = result.get("href") or result.get("url") or "" + title = result.get("title") or "" + print(f"[ddgs] {i}. {href} | {title}") + else: + print("[ddgs] (no results)") + print() hostnames = hostnames_from_results(results, suffixes=suffixes) return hostnames[:limit] diff --git a/test-run.py b/test-run.py new file mode 100644 index 0000000..9677b35 --- /dev/null +++ b/test-run.py @@ -0,0 +1,10 @@ +from ddgs import DDGS +from websitescorecard.discovery import hostnames_from_results + +query = "Agriculture and Agrarian Insurance Board Sri Lanka" +with DDGS() as ddgs: + raw = list(ddgs.text(query, max_results=30)) + +print([r.get("href") for r in raw]) +print("unfiltered:", hostnames_from_results(raw)) +print("gov.lk only:", hostnames_from_results(raw, suffixes=["gov.lk", "gov"])) \ No newline at end of file From 3b485f6b55cbcb2f29b830ec36cfcb70b3865d65 Mon Sep 17 00:00:00 2001 From: zaeema-n Date: Wed, 24 Jun 2026 11:59:56 +0530 Subject: [PATCH 06/12] Move relevant files to resolve folder --- output/bodies_with_urls.csv | 15 +++++++++++++++ {data => output}/mins_depts_test_scored.csv | 0 src/websitescorecard/cli.py | 2 +- src/websitescorecard/resolve/__init__.py | 5 +++++ .../{discovery.py => resolve/domain_search.py} | 2 +- .../{ => resolve}/resolve_runner.py | 3 ++- src/websitescorecard/runner.py | 1 + test-run.py | 10 ---------- .../{test_discovery.py => test_domain_search.py} | 8 ++++---- tests/test_resolve_runner.py | 14 +++++++------- 10 files changed, 36 insertions(+), 24 deletions(-) create mode 100644 output/bodies_with_urls.csv rename {data => output}/mins_depts_test_scored.csv (100%) create mode 100644 src/websitescorecard/resolve/__init__.py rename src/websitescorecard/{discovery.py => resolve/domain_search.py} (98%) rename src/websitescorecard/{ => resolve}/resolve_runner.py (97%) delete mode 100644 test-run.py rename tests/{test_discovery.py => test_domain_search.py} (93%) diff --git a/output/bodies_with_urls.csv b/output/bodies_with_urls.csv new file mode 100644 index 0000000..32a875e --- /dev/null +++ b/output/bodies_with_urls.csv @@ -0,0 +1,15 @@ +Institution Name,URL,url_2,url_3,lookup_status,lookup_error +Agriculture and Agrarian Insurance Board,soe.lk,aib.gov.lk,srilankalaw.lk,ok, +Central Engineering Consultancy Bureau and its subsidiaries and affiliated companies,cecb.lk,cesl.lk,soe.lk,ok, +Department of Agrarian Development,phonebook.lk,rainbowpages.lk,alexa.lk,ok, +Department of Agriculture,doa.gov.lk,agrimin.gov.lk,landmin.gov.lk,ok, +Department of Animal Production and Health,np.gov.lk,daph.gov.lk,lankainformation.lk,ok, +Department of Cinnamon Development,cinnamon.gov.lk,island.lk,agrimin.gov.lk,ok, +Department of Export Agriculture,dea.gov.lk,doa.gov.lk,uwu.ac.lk,ok, +Department of Irrigation,irrigation.gov.lk,nsdi.gov.lk,irrigationmin.gov.lk,ok, +Department of Land Commissioner General,phonebook.lk,lankainformation.lk,dailymirror.lk,ok, +Department of Land Title Settlement,phonebook.lk,rti.gov.lk,landsettledept.gov.lk,ok, +Department of Land Use Policy Planning,nsdi.gov.lk,luppd.gov.lk,parliament.lk,ok, +Hector Kobbekaduwa Agrarian Research and Training Institute,harti.gov.lk,ips.lk,parliament.lk,ok, +Institute of Surveying and Mapping,ism.ac.lk,survey.gov.lk,srilankalaw.lk,ok, +Land Acquisition Board of Review,landmin.gov.lk,lst.lk,srilankalaw.lk,ok, diff --git a/data/mins_depts_test_scored.csv b/output/mins_depts_test_scored.csv similarity index 100% rename from data/mins_depts_test_scored.csv rename to output/mins_depts_test_scored.csv diff --git a/src/websitescorecard/cli.py b/src/websitescorecard/cli.py index 69d5efc..fba02f1 100644 --- a/src/websitescorecard/cli.py +++ b/src/websitescorecard/cli.py @@ -10,7 +10,7 @@ from websitescorecard import __version__ from websitescorecard.checks import CHECK_REGISTRY, resolve_checks -from websitescorecard.resolve_runner import ResolveConfig, run_resolve +from websitescorecard.resolve import ResolveConfig, run_resolve from websitescorecard.runner import ScanConfig, run_scan app = typer.Typer( diff --git a/src/websitescorecard/resolve/__init__.py b/src/websitescorecard/resolve/__init__.py new file mode 100644 index 0000000..92dd094 --- /dev/null +++ b/src/websitescorecard/resolve/__init__.py @@ -0,0 +1,5 @@ +"""Resolve institution names to domains via web search.""" + +from websitescorecard.resolve.resolve_runner import ResolveConfig, run_resolve + +__all__ = ["ResolveConfig", "run_resolve"] diff --git a/src/websitescorecard/discovery.py b/src/websitescorecard/resolve/domain_search.py similarity index 98% rename from src/websitescorecard/discovery.py rename to src/websitescorecard/resolve/domain_search.py index e5961e6..cae29b2 100644 --- a/src/websitescorecard/discovery.py +++ b/src/websitescorecard/resolve/domain_search.py @@ -1,4 +1,4 @@ -"""Domain discovery via web search.""" +"""Domain search via web search.""" from __future__ import annotations diff --git a/src/websitescorecard/resolve_runner.py b/src/websitescorecard/resolve/resolve_runner.py similarity index 97% rename from src/websitescorecard/resolve_runner.py rename to src/websitescorecard/resolve/resolve_runner.py index 39208db..aa294b8 100644 --- a/src/websitescorecard/resolve_runner.py +++ b/src/websitescorecard/resolve/resolve_runner.py @@ -10,7 +10,7 @@ from rich.progress import BarColumn, Progress, TaskProgressColumn, TextColumn, TimeElapsedColumn from websitescorecard.csv_io import read_csv, write_csv -from websitescorecard.discovery import search_domains +from websitescorecard.resolve.domain_search import search_domains LOOKUP_STATUS_COL = "lookup_status" LOOKUP_ERROR_COL = "lookup_error" @@ -127,6 +127,7 @@ def run_resolve(config: ResolveConfig) -> None: with Progress( TextColumn("[progress.description]{task.description}"), BarColumn(), + TextColumn("({task.completed}/{task.total})"), TaskProgressColumn(), TimeElapsedColumn(), ) as progress: diff --git a/src/websitescorecard/runner.py b/src/websitescorecard/runner.py index 9b8d55b..bc269a1 100644 --- a/src/websitescorecard/runner.py +++ b/src/websitescorecard/runner.py @@ -70,6 +70,7 @@ def run_scan(config: ScanConfig) -> None: with Progress( TextColumn("[progress.description]{task.description}"), BarColumn(), + TextColumn("({task.completed}/{task.total})"), TaskProgressColumn(), TimeElapsedColumn(), ) as progress: diff --git a/test-run.py b/test-run.py deleted file mode 100644 index 9677b35..0000000 --- a/test-run.py +++ /dev/null @@ -1,10 +0,0 @@ -from ddgs import DDGS -from websitescorecard.discovery import hostnames_from_results - -query = "Agriculture and Agrarian Insurance Board Sri Lanka" -with DDGS() as ddgs: - raw = list(ddgs.text(query, max_results=30)) - -print([r.get("href") for r in raw]) -print("unfiltered:", hostnames_from_results(raw)) -print("gov.lk only:", hostnames_from_results(raw, suffixes=["gov.lk", "gov"])) \ No newline at end of file diff --git a/tests/test_discovery.py b/tests/test_domain_search.py similarity index 93% rename from tests/test_discovery.py rename to tests/test_domain_search.py index 2ea9cca..9cdb11d 100644 --- a/tests/test_discovery.py +++ b/tests/test_domain_search.py @@ -1,10 +1,10 @@ -"""Tests for domain discovery.""" +"""Tests for domain search.""" from unittest.mock import MagicMock, patch import pytest -from websitescorecard.discovery import ( +from websitescorecard.resolve.domain_search import ( extract_hostname, hostnames_from_results, matches_suffix, @@ -73,7 +73,7 @@ def test_hostnames_from_results_dedupes_and_filters(): ] -@patch("websitescorecard.discovery.DDGS") +@patch("websitescorecard.resolve.domain_search.DDGS") def test_search_domains_filters_and_limits(mock_ddgs_cls): mock_ddgs = MagicMock() mock_ddgs.__enter__.return_value = mock_ddgs @@ -96,7 +96,7 @@ def test_search_domains_filters_and_limits(mock_ddgs_cls): mock_ddgs.text.assert_called_once_with("Ministry of Finance Sri Lanka", max_results=4) -@patch("websitescorecard.discovery.DDGS") +@patch("websitescorecard.resolve.domain_search.DDGS") def test_search_domains_zero_limit_returns_empty(mock_ddgs_cls): assert search_domains("query", limit=0) == [] mock_ddgs_cls.assert_not_called() diff --git a/tests/test_resolve_runner.py b/tests/test_resolve_runner.py index 642eace..bd8639b 100644 --- a/tests/test_resolve_runner.py +++ b/tests/test_resolve_runner.py @@ -8,7 +8,7 @@ import pytest from websitescorecard.csv_io import read_csv -from websitescorecard.resolve_runner import ( +from websitescorecard.resolve.resolve_runner import ( LOOKUP_ERROR_COL, LOOKUP_STATUS_COL, ResolveConfig, @@ -29,7 +29,7 @@ def test_url_columns_custom_primary(): assert _url_columns("website", 2) == ["website", "url_2"] -@patch("websitescorecard.resolve_runner.search_domains") +@patch("websitescorecard.resolve.resolve_runner.search_domains") def test_run_resolve_limit_1(mock_search, tmp_path: Path): def fake_search(query: str, **kwargs): if "Finance" in query: @@ -71,7 +71,7 @@ def fake_search(query: str, **kwargs): assert mock_search.call_count == 2 -@patch("websitescorecard.resolve_runner.search_domains") +@patch("websitescorecard.resolve.resolve_runner.search_domains") def test_run_resolve_limit_3(mock_search, tmp_path: Path): mock_search.return_value = ["first.gov.lk", "second.gov.lk", "third.gov.lk"] @@ -106,7 +106,7 @@ def test_run_resolve_limit_3(mock_search, tmp_path: Path): assert row[LOOKUP_ERROR_COL] == "" -@patch("websitescorecard.resolve_runner.search_domains") +@patch("websitescorecard.resolve.resolve_runner.search_domains") def test_run_resolve_skips_existing_url(mock_search, tmp_path: Path): input_csv = tmp_path / "input.csv" output_csv = tmp_path / "output.csv" @@ -134,7 +134,7 @@ def test_run_resolve_skips_existing_url(mock_search, tmp_path: Path): mock_search.assert_called_once() -@patch("websitescorecard.resolve_runner.search_domains") +@patch("websitescorecard.resolve.resolve_runner.search_domains") def test_run_resolve_no_results(mock_search, tmp_path: Path): mock_search.return_value = [] @@ -158,7 +158,7 @@ def test_run_resolve_no_results(mock_search, tmp_path: Path): assert rows[0][LOOKUP_ERROR_COL] == "" -@patch("websitescorecard.resolve_runner.search_domains") +@patch("websitescorecard.resolve.resolve_runner.search_domains") def test_run_resolve_search_error(mock_search, tmp_path: Path): mock_search.side_effect = RuntimeError("search failed") @@ -195,7 +195,7 @@ def test_run_resolve_empty_name_records_error(tmp_path: Path): delay=0, ) - with patch("websitescorecard.resolve_runner.search_domains") as mock_search: + with patch("websitescorecard.resolve.resolve_runner.search_domains") as mock_search: run_resolve(config) mock_search.assert_not_called() From 29f78972000cc26f42bbb3759d4b5cc92995b6cc Mon Sep 17 00:00:00 2001 From: zaeema-n Date: Wed, 24 Jun 2026 14:45:13 +0530 Subject: [PATCH 07/12] Add all departments names and websites --- data/departments_2026_1.csv | 235 ++++++++++++++++++++++++ data/departments_2026_2.csv | 236 +++++++++++++++++++++++++ output/departments_2026_1_3_output.csv | 235 ++++++++++++++++++++++++ output/departments_2026_2_3_output.csv | 236 +++++++++++++++++++++++++ 4 files changed, 942 insertions(+) create mode 100644 data/departments_2026_1.csv create mode 100644 data/departments_2026_2.csv create mode 100644 output/departments_2026_1_3_output.csv create mode 100644 output/departments_2026_2_3_output.csv diff --git a/data/departments_2026_1.csv b/data/departments_2026_1.csv new file mode 100644 index 0000000..dfdb91d --- /dev/null +++ b/data/departments_2026_1.csv @@ -0,0 +1,235 @@ +Ministry,Department +"Minister of Agriculture, Livestock, Land and Irrigation","Agriculture and Agrarian Insurance Board" +"Minister of Agriculture, Livestock, Land and Irrigation","Central Engineering Consultancy Bureau and its subsidiaries and affiliated companies" +"Minister of Agriculture, Livestock, Land and Irrigation","Department of Agrarian Development" +"Minister of Agriculture, Livestock, Land and Irrigation","Department of Agriculture" +"Minister of Agriculture, Livestock, Land and Irrigation","Department of Animal Production and Health" +"Minister of Agriculture, Livestock, Land and Irrigation","Department of Cinnamon Development" +"Minister of Agriculture, Livestock, Land and Irrigation","Department of Export Agriculture" +"Minister of Agriculture, Livestock, Land and Irrigation","Department of Irrigation" +"Minister of Agriculture, Livestock, Land and Irrigation","Department of Land Commissioner General" +"Minister of Agriculture, Livestock, Land and Irrigation","Department of Land Title Settlement" +"Minister of Agriculture, Livestock, Land and Irrigation","Department of Land Use Policy Planning" +"Minister of Agriculture, Livestock, Land and Irrigation","Hector Kobbekaduwa Agrarian Research and Training Institute" +"Minister of Agriculture, Livestock, Land and Irrigation","Institute of Surveying and Mapping" +"Minister of Agriculture, Livestock, Land and Irrigation","Land Acquisition Board of Review" +"Minister of Agriculture, Livestock, Land and Irrigation","Land Reform Commission" +"Minister of Agriculture, Livestock, Land and Irrigation","Land Survey Council" +"Minister of Agriculture, Livestock, Land and Irrigation","Mahaweli Consultancy Bureau (Pvt) Ltd" +"Minister of Agriculture, Livestock, Land and Irrigation","Mahaweli Livestock Enterprise Limited" +"Minister of Agriculture, Livestock, Land and Irrigation","Major irrigation development projects including Uma Oya, Moragahakanda, Kalu Ganga, Gin Ganga, Nilwala, Malwathu Oya" +"Minister of Agriculture, Livestock, Land and Irrigation","Milco (Pvt.) Ltd." +"Minister of Agriculture, Livestock, Land and Irrigation","National Agricultural Diversification and Settlement Authority" +"Minister of Agriculture, Livestock, Land and Irrigation","National Fertilizer Secretariat" +"Minister of Agriculture, Livestock, Land and Irrigation","National Hunger Eradication Campaign Board of Sri Lanka (National Food Promotion Board)" +"Minister of Agriculture, Livestock, Land and Irrigation","National Institute of Post-Harvest Management" +"Minister of Agriculture, Livestock, Land and Irrigation","National Livestock Development Board and affiliated companies" +"Minister of Agriculture, Livestock, Land and Irrigation","Paddy Marketing Board" +"Minister of Agriculture, Livestock, Land and Irrigation","Sri Lanka Council for Agricultural Research Policy" +"Minister of Agriculture, Livestock, Land and Irrigation","Sri Lanka Mahaweli Authority" +"Minister of Agriculture, Livestock, Land and Irrigation","State Fertilizer Company Ltd." +"Minister of Agriculture, Livestock, Land and Irrigation","Survey Department of Sri Lanka" +"Minister of Buddhasasana, Religious and Cultural Affairs","Amaradeva Aesthetic and Research Centre" +"Minister of Buddhasasana, Religious and Cultural Affairs","Buddhasasana Fund" +"Minister of Buddhasasana, Religious and Cultural Affairs","Buddhist Renaissance Fund" +"Minister of Buddhasasana, Religious and Cultural Affairs","Central Cultural Fund" +"Minister of Buddhasasana, Religious and Cultural Affairs","Department of Archaeology" +"Minister of Buddhasasana, Religious and Cultural Affairs","Department of Buddhist Affairs" +"Minister of Buddhasasana, Religious and Cultural Affairs","Department of Christian Religious Affairs" +"Minister of Buddhasasana, Religious and Cultural Affairs","Department of Cultural Affairs" +"Minister of Buddhasasana, Religious and Cultural Affairs","Department of Hindu Religious and Cultural Affairs" +"Minister of Buddhasasana, Religious and Cultural Affairs","Department of Muslim Religious and Cultural Affairs" +"Minister of Buddhasasana, Religious and Cultural Affairs","Department of National Archives" +"Minister of Buddhasasana, Religious and Cultural Affairs","Department of National Museums" +"Minister of Buddhasasana, Religious and Cultural Affairs","Department of Public Trustee" +"Minister of Buddhasasana, Religious and Cultural Affairs","Galle Heritage Foundation" +"Minister of Buddhasasana, Religious and Cultural Affairs","Gramodaya Folk Arts Centre" +"Minister of Buddhasasana, Religious and Cultural Affairs","J.R. Jayewardene Centre" +"Minister of Buddhasasana, Religious and Cultural Affairs","Mahinda Rajapaksa National Tele Cinema Park" +"Minister of Buddhasasana, Religious and Cultural Affairs","National Arts Council" +"Minister of Buddhasasana, Religious and Cultural Affairs","National Film Corporation" +"Minister of Buddhasasana, Religious and Cultural Affairs","National Library and Documentation Services Board" +"Minister of Buddhasasana, Religious and Cultural Affairs","National Performing Arts Theatre (Nelum Pokuna)" +"Minister of Buddhasasana, Religious and Cultural Affairs","Public Performance Board" +"Minister of Buddhasasana, Religious and Cultural Affairs","S W R D Bandaranaike National Memorial Foundation" +"Minister of Buddhasasana, Religious and Cultural Affairs","Tower Hall Theatre Foundation" +"Minister of Buddhasasana, Religious and Cultural Affairs","“Ape Gama”" +"Minister of Defence","Api Wenuwen Api Fund" +"Minister of Defence","Coast Guard Department of Sri Lanka" +"Minister of Defence","Defence Research and Development Centre" +"Minister of Defence","Defence Services College" +"Minister of Defence","Defence Services Command and Staff College" +"Minister of Defence","Department of Meteorology" +"Minister of Defence","Disaster Management Centre" +"Minister of Defence","Institute of National Security Studies" +"Minister of Defence","Miloda Institute - as a Faculty of Kotelawala Defence University" +"Minister of Defence","National Authority for the Implementation of Chemical Weapons Convention" +"Minister of Defence","National Building Research Organization" +"Minister of Defence","National Cadet Corps" +"Minister of Defence","National Defence College" +"Minister of Defence","National Defence Fund" +"Minister of Defence","National Disaster Management Council" +"Minister of Defence","National Disaster Relief Services Centre" +"Minister of Defence","National Hydrographic Council " +"Minister of Defence","Office of the Chief of Defence Staff" +"Minister of Defence","Rakna Arakshana Lanka Ltd." +"Minister of Defence","Ranaviru Seva Authority" +"Minister of Defence","Sir John Kotelawala Defence University" +"Minister of Defence","Sri Lanka Air Force" +"Minister of Defence","Sri Lanka Army" +"Minister of Defence","Sri Lanka National Hydrographic Office" +"Minister of Defence","Sri Lanka Navy" +"Minister of Defence","State Intelligence Service" +"Minister of Digital Economy","Colombo Lotus Tower Management Co. (Pvt.) Ltd" +"Minister of Digital Economy","Data Protection Authority of Sri Lanka" +"Minister of Digital Economy","Department of Registration of Persons" +"Minister of Digital Economy","Information Technology Parks" +"Minister of Digital Economy","Information and Communication Technology Agency and Allied Institutions" +"Minister of Digital Economy","Online Safety Commission" +"Minister of Digital Economy","Sri Lanka Computer Emergency Readiness Team" +"Minister of Digital Economy","Sri Lanka Telecom and its Subsidiaries and Allied Institutions" +"Minister of Digital Economy","Telecommunication Regulatory Commission of Sri Lanka and Allied Institutions" +"Minister of Education, Higher Education and Vocational Education","All State Universities, Postgraduate Institutions and other Institutions under the purview of University Grants Commission" +"Minister of Education, Higher Education and Vocational Education","Buddhasravaka Bhikku University" +"Minister of Education, Higher Education and Vocational Education","Buddhist and Pali University of Sri Lanka" +"Minister of Education, Higher Education and Vocational Education","Ceylon German Technical Training Institute" +"Minister of Education, Higher Education and Vocational Education","Department of Educational Publications" +"Minister of Education, Higher Education and Vocational Education","Department of Examinations" +"Minister of Education, Higher Education and Vocational Education","Department of Technical Education and Training" +"Minister of Education, Higher Education and Vocational Education","Directorates of Education" +"Minister of Education, Higher Education and Vocational Education","National Apprenticeship and Industrial Training Authority" +"Minister of Education, Higher Education and Vocational Education","National Colleges of Education" +"Minister of Education, Higher Education and Vocational Education","National Education Commission" +"Minister of Education, Higher Education and Vocational Education","National Institute of Business Management and affiliated institutions" +"Minister of Education, Higher Education and Vocational Education","National Institute of Education" +"Minister of Education, Higher Education and Vocational Education","Ocean University of Sri Lanka" +"Minister of Education, Higher Education and Vocational Education","Piriven Education Board" +"Minister of Education, Higher Education and Vocational Education","Skills Development Fund Ltd." +"Minister of Education, Higher Education and Vocational Education","South Asian Centre for Teacher Development (SACTD)" +"Minister of Education, Higher Education and Vocational Education","Sri Lanka Institute of Advanced Technological Education" +"Minister of Education, Higher Education and Vocational Education","Sri Lanka Inventors' Fund" +"Minister of Education, Higher Education and Vocational Education","State Printing Corporation" +"Minister of Education, Higher Education and Vocational Education","Teachers' College" +"Minister of Education, Higher Education and Vocational Education","Tertiary and Vocational Education Commission" +"Minister of Education, Higher Education and Vocational Education","UNESCO National Commission of Sri Lanka" +"Minister of Education, Higher Education and Vocational Education","University Grants Commission" +"Minister of Education, Higher Education and Vocational Education","University of Vocational Technology" +"Minister of Education, Higher Education and Vocational Education","Vocational Training Authority of Sri Lanka" +"Minister of Energy","Ceylon Electricity Board and its subsidiary Companies" +"Minister of Energy","Ceylon Petroleum Corporation" +"Minister of Energy","Ceylon Petroleum Storage Terminal Ltd." +"Minister of Energy","Electricity Distribution Lanka (Pvt) Ltd" +"Minister of Energy","Electricity Generation Lanka (Pvt) Ltd" +"Minister of Energy","LTL Holdings (Pvt.) Ltd." +"Minister of Energy","Lanka Coal Company (Pvt) Ltd" +"Minister of Energy","Lanka Electricity Company (Pvt) Ltd" +"Minister of Energy","National System Operator (Pvt) Ltd" +"Minister of Energy","National Transmission Network Service Provider (Pvt) Ltd" +"Minister of Energy","Petroleum Development Authority of Sri Lanka" +"Minister of Energy","Polipto Lanka (Pvt) Ltd." +"Minister of Energy","Sri Lanka Sustainable Energy Authority" +"Minister of Energy","Trinco Petroleum Terminal (Pvt) Ltd" +"Minister of Environment","Central Environmental Authority" +"Minister of Environment","Department of Coast Conservation and Coastal Resource Management" +"Minister of Environment","Department of Forest Conservation" +"Minister of Environment","Department of National Botanic Gardens" +"Minister of Environment","Department of National Zoological Gardens" +"Minister of Environment","Department of Wildlife Conservation" +"Minister of Environment","Marine Environment Protection Authority" +"Minister of Environment","Sri Lanka Climate Fund (Pvt) Ltd." +"Minister of Environment","State Timber Corporation" +"Minister of Environment","Water Resources Board" +"Minister of Finance, Planning and Economic Development","All State Banks, Financial Institutions, Insurance Companies and their subsidiaries and related institutions" +"Minister of Finance, Planning and Economic Development","Asian Game (pvt) Ltd" +"Minister of Finance, Planning and Economic Development","Board of Investment of Sri Lanka" +"Minister of Finance, Planning and Economic Development","Canwill Holdings (Pvt) Ltd" +"Minister of Finance, Planning and Economic Development","Central Bank of Sri Lanka" +"Minister of Finance, Planning and Economic Development","Colombo Port City Economic Commission" +"Minister of Finance, Planning and Economic Development","Commonwealth Game Hambantota (Pvt) Ltd" +"Minister of Finance, Planning and Economic Development","Credit Information Bureau of Sri Lanka" +"Minister of Finance, Planning and Economic Development","Department of Census and Statistics" +"Minister of Finance, Planning and Economic Development","Department of Development Finance" +"Minister of Finance, Planning and Economic Development","Department of Excise" +"Minister of Finance, Planning and Economic Development","Department of External Resources" +"Minister of Finance, Planning and Economic Development","Department of Fiscal Policy" +"Minister of Finance, Planning and Economic Development","Department of Import and Export Control" +"Minister of Finance, Planning and Economic Development","Department of Information Technology Management" +"Minister of Finance, Planning and Economic Development","Department of Inland Revenue" +"Minister of Finance, Planning and Economic Development","Department of Legal Affairs" +"Minister of Finance, Planning and Economic Development","Department of Management Audit" +"Minister of Finance, Planning and Economic Development","Department of Management Services" +"Minister of Finance, Planning and Economic Development","Department of National Budget" +"Minister of Finance, Planning and Economic Development","Department of National Planning" +"Minister of Finance, Planning and Economic Development","Department of Project Management and Monitoring" +"Minister of Finance, Planning and Economic Development","Department of Public Enterprises" +"Minister of Finance, Planning and Economic Development","Department of Public Finance" +"Minister of Finance, Planning and Economic Development","Department of State Accounts" +"Minister of Finance, Planning and Economic Development","Department of Trade and Investment Policy" +"Minister of Finance, Planning and Economic Development","Department of Treasury Operations" +"Minister of Finance, Planning and Economic Development","Department of Valuation" +"Minister of Finance, Planning and Economic Development","Development Lotteries Board" +"Minister of Finance, Planning and Economic Development","Employees' Trust Fund" +"Minister of Finance, Planning and Economic Development","Gambling Regulatory Authority" +"Minister of Finance, Planning and Economic Development","General Treasury" +"Minister of Finance, Planning and Economic Development","Hotel Developers (Lanka) PLC (PQ 143)" +"Minister of Finance, Planning and Economic Development","Housing Development Finance Corporation" +"Minister of Finance, Planning and Economic Development","Institute of Policy Studies" +"Minister of Finance, Planning and Economic Development","Institutions coming under the Revival (Removal) of Underperforming Enterprises or Underutilized Assets Act vested to the Secretary to the Treasury" +"Minister of Finance, Planning and Economic Development","Insurance Regulatory Commission of Sri Lanka" +"Minister of Finance, Planning and Economic Development","Lady Lochore Fund" +"Minister of Finance, Planning and Economic Development","Lanka Fabric Ltd" +"Minister of Finance, Planning and Economic Development","Magampura Port Management Company (Pvt) Ltd" +"Minister of Finance, Planning and Economic Development","Mihin Lanka (Pvt) Ltd" +"Minister of Finance, Planning and Economic Development","National Credit Guarantee Institution Limited" +"Minister of Finance, Planning and Economic Development","National Insurance Trust Fund" +"Minister of Finance, Planning and Economic Development","National Lotteries Board" +"Minister of Finance, Planning and Economic Development","Office of Comptroller General" +"Minister of Finance, Planning and Economic Development","Peliyagoda warehouse" +"Minister of Finance, Planning and Economic Development","Provident Property Lanka Ltd - Institution being reviewed" +"Minister of Finance, Planning and Economic Development","Public Debt Management Office" +"Minister of Finance, Planning and Economic Development","Public Service Mutual Provident Fund" +"Minister of Finance, Planning and Economic Development","Public Utilities Commission of Sri Lanka" +"Minister of Finance, Planning and Economic Development","Regional Development Bank" +"Minister of Finance, Planning and Economic Development","Securities and Exchange Commission of Sri Lanka" +"Minister of Finance, Planning and Economic Development","Sri Lanka Accounting and Auditing Standard Monitoring Board" +"Minister of Finance, Planning and Economic Development","Sri Lanka Customs" +"Minister of Finance, Planning and Economic Development","Sri Lanka Export Credit Insurance Corporation" +"Minister of Finance, Planning and Economic Development","Sri Lanka Insurance Corporation and its subsidiaries and affiliated companies" +"Minister of Finance, Planning and Economic Development","State Mortgage and Investment Bank" +"Minister of Finance, Planning and Economic Development","State Resources Management Corporation" +"Minister of Finance, Planning and Economic Development","Strategic Enterprises Management Agency" +"Minister of Finance, Planning and Economic Development","Strike, Riot, Civil Commotion and Terrorism Fund" +"Minister of Finance, Planning and Economic Development","Sustainable Development Council" +"Minister of Finance, Planning and Economic Development","Tax Appeals Commission" +"Minister of Finance, Planning and Economic Development","Techno Park Development Company (Pvt.) Limited" +"Minister of Finance, Planning and Economic Development","Welfare Benefits Board" +"Minister of Fisheries, Aquatic and Ocean Resources","Cey-Nor Foundation Ltd." +"Minister of Fisheries, Aquatic and Ocean Resources","Ceylon Fisheries Corporation" +"Minister of Fisheries, Aquatic and Ocean Resources","Ceylon Fishery Harbours Corporation" +"Minister of Fisheries, Aquatic and Ocean Resources","Department of Fisheries and Aquatic Resources" +"Minister of Fisheries, Aquatic and Ocean Resources","National Aquaculture Development Authority" +"Minister of Fisheries, Aquatic and Ocean Resources","National Aquatic Resources Research and Development Agency" +"Minister of Fisheries, Aquatic and Ocean Resources","North Sea Ltd" +"Minister of Foreign Affairs, Foreign Employment and Tourism","Diplomatic Missions in abroad" +"Minister of Foreign Affairs, Foreign Employment and Tourism","Foreign Employment Agency of Sri Lanka (Pvt.) Ltd." +"Minister of Foreign Affairs, Foreign Employment and Tourism","Lakshman Kadirgamar Institute for International Relations and Strategic Studies" +"Minister of Foreign Affairs, Foreign Employment and Tourism","National Oceanic Affairs Committee Secretariat" +"Minister of Foreign Affairs, Foreign Employment and Tourism","Sri Lanka Convention Bureau" +"Minister of Foreign Affairs, Foreign Employment and Tourism","Sri Lanka Foreign Employment Bureau" +"Minister of Foreign Affairs, Foreign Employment and Tourism","Sri Lanka Institute of Tourism and Hotel Management" +"Minister of Foreign Affairs, Foreign Employment and Tourism","Sri Lanka Tourism Development Authority" +"Minister of Foreign Affairs, Foreign Employment and Tourism","Sri Lanka Tourism Promotion Bureau" +"Minister of Health and Mass Media","1990 Suwaseriya Foundation" +"Minister of Health and Mass Media","All National, Teaching and Specific Government Hospitals" +"Minister of Health and Mass Media","Ashraff Memorial Hospital" +"Minister of Health and Mass Media","Associated Newspapers of Ceylon Ltd." +"Minister of Health and Mass Media","Ayurveda Education and Hospital Board" +"Minister of Health and Mass Media","Ayurveda Teaching and Research Hospitals" +"Minister of Health and Mass Media","Ayurvedic Medical Council" +"Minister of Health and Mass Media","Department of Ayurveda" +"Minister of Health and Mass Media","Department of Government Information" +"Minister of Health and Mass Media","Department of Government Printing" +"Minister of Health and Mass Media","Department of Health Services" +"Minister of Health and Mass Media","Homeopathy Hospital, Welisara" +"Minister of Health and Mass Media","Homeopathy Medical Council" +"Minister of Health and Mass Media","Independent Television Network" diff --git a/data/departments_2026_2.csv b/data/departments_2026_2.csv new file mode 100644 index 0000000..d0272f0 --- /dev/null +++ b/data/departments_2026_2.csv @@ -0,0 +1,236 @@ +Ministry,Department +"Minister of Health and Mass Media","Lanka Puwath Ltd" +"Minister of Health and Mass Media","Medical Research Institute" +"Minister of Health and Mass Media","National Authority on Tobacco and Alcohol" +"Minister of Health and Mass Media","National Health Council" +"Minister of Health and Mass Media","National Health Development Fund" +"Minister of Health and Mass Media","National Institute of Health Sciences" +"Minister of Health and Mass Media","National Institute of Nephrology, Dialysis and Transplantation" +"Minister of Health and Mass Media","National Medicines Regulatory Authority" +"Minister of Health and Mass Media","Postal Department" +"Minister of Health and Mass Media","Private Health Services Regulatory Council" +"Minister of Health and Mass Media","Right to Information Commission" +"Minister of Health and Mass Media","School of Medical Laboratory Technology" +"Minister of Health and Mass Media","Selacine Media Solutions (PVT) LTD" +"Minister of Health and Mass Media","Sri Jayewardenepura General Hospital" +"Minister of Health and Mass Media","Sri Lanka Ayurvedic Drugs Corporation" +"Minister of Health and Mass Media","Sri Lanka Broadcasting Corporation" +"Minister of Health and Mass Media","Sri Lanka Foundation" +"Minister of Health and Mass Media","Sri Lanka Institute of Printing" +"Minister of Health and Mass Media","Sri Lanka Media Training Institute" +"Minister of Health and Mass Media","Sri Lanka Medical College Council" +"Minister of Health and Mass Media","Sri Lanka Medical Council" +"Minister of Health and Mass Media","Sri Lanka Nursing Council" +"Minister of Health and Mass Media","Sri Lanka Press Council" +"Minister of Health and Mass Media","Sri Lanka Rupavahini Corporation" +"Minister of Health and Mass Media","State Pharmaceutical Corporation" +"Minister of Health and Mass Media","State Pharmaceutical Manufacturing Corporation" +"Minister of Health and Mass Media","Vijaya Kumaratunga Memorial Hospital" +"Minister of Housing, Construction and Water Supply","Building Material Corporation Limited" +"Minister of Housing, Construction and Water Supply","Construction Guarantee Fund" +"Minister of Housing, Construction and Water Supply","Construction Industry Development Authority" +"Minister of Housing, Construction and Water Supply","Department of Buildings" +"Minister of Housing, Construction and Water Supply","Department of Government Factories" +"Minister of Housing, Construction and Water Supply","Department of National Community Water Supply" +"Minister of Housing, Construction and Water Supply","Engineering Council of Sri Lanka" +"Minister of Housing, Construction and Water Supply","National Equipment and Machinery Organization" +"Minister of Housing, Construction and Water Supply","National Housing Development Authority" +"Minister of Housing, Construction and Water Supply","National Water Supply and Drainage Board" +"Minister of Housing, Construction and Water Supply","Ocean View Development (Pvt) Ltd." +"Minister of Housing, Construction and Water Supply","State Engineering Corporation" +"Minister of Industry and Entrepreneurship Development","BCC Lanka Limited" +"Minister of Industry and Entrepreneurship Development","Ceylon Ceramics Corporation (Brick and Tiles Division)" +"Minister of Industry and Entrepreneurship Development","Ceylon Industrial Development Board" +"Minister of Industry and Entrepreneurship Development","Department of Textile Industries" +"Minister of Industry and Entrepreneurship Development","GSMB Technical Services (Pvt) Ltd." +"Minister of Industry and Entrepreneurship Development","Galoya Plantation (Pvt.) Company" +"Minister of Industry and Entrepreneurship Development","Gem and Jewellery Research and Training Institute" +"Minister of Industry and Entrepreneurship Development","Geological Survey and Mines Bureau" +"Minister of Industry and Entrepreneurship Development","Hingurana Sugar Industry Ltd." +"Minister of Industry and Entrepreneurship Development","Kahatagaha Graphite Lanka Ltd" +"Minister of Industry and Entrepreneurship Development","Kantale Sugar Company Ltd." +"Minister of Industry and Entrepreneurship Development","Lanka Cement Ltd" +"Minister of Industry and Entrepreneurship Development","Lanka Leyland (Pvt) Ltd." +"Minister of Industry and Entrepreneurship Development","Lanka Mineral Sands Company" +"Minister of Industry and Entrepreneurship Development","Lanka Phosphate Limited" +"Minister of Industry and Entrepreneurship Development","Lanka Salusala Ltd" +"Minister of Industry and Entrepreneurship Development","Lanka Sugar Company (Pvt.) Ltd." +"Minister of Industry and Entrepreneurship Development","Lanka Textile Mills Emporium Ltd." +"Minister of Industry and Entrepreneurship Development","National Crafts Council" +"Minister of Industry and Entrepreneurship Development","National Design Centre" +"Minister of Industry and Entrepreneurship Development","National Enterprise Development Authority" +"Minister of Industry and Entrepreneurship Development","National Gem and Jewellery Authority" +"Minister of Industry and Entrepreneurship Development","National Paper Corporation Ltd." +"Minister of Industry and Entrepreneurship Development","National Productivity Secretariat" +"Minister of Industry and Entrepreneurship Development","National Salt Limited" +"Minister of Industry and Entrepreneurship Development","Paranthan Chemicals Ltd" +"Minister of Industry and Entrepreneurship Development","Small Enterprise Development Division" +"Minister of Industry and Entrepreneurship Development","Small and Medium Enterprises Authority" +"Minister of Industry and Entrepreneurship Development","Small and Medium Enterprises Venture Capital Company" +"Minister of Industry and Entrepreneurship Development","Sri Lanka Cement Corporation" +"Minister of Industry and Entrepreneurship Development","Sri Lanka Export Development Board" +"Minister of Industry and Entrepreneurship Development","Sri Lanka Handicraft Board (Laksala)" +"Minister of Industry and Entrepreneurship Development","Sri Lanka Institute of Textile and Apparels" +"Minister of Industry and Entrepreneurship Development","Sugar Cane Research Institute" +"Minister of Industry and Entrepreneurship Development","Timber-related Design Centre" +"Minister of Justice and National Integration","Attorney General's Department" +"Minister of Justice and National Integration","Commercial Mediation Centre of Sri Lanka" +"Minister of Justice and National Integration","Community Based Correction Department" +"Minister of Justice and National Integration","Council of Legal Education" +"Minister of Justice and National Integration","Department of Debt Conciliation Board" +"Minister of Justice and National Integration","Department of Government Analyst" +"Minister of Justice and National Integration","Department of Official Languages" +"Minister of Justice and National Integration","Department of Prisons" +"Minister of Justice and National Integration","Law Commission of Sri Lanka" +"Minister of Justice and National Integration","Legal Aid Commission of Sri Lanka" +"Minister of Justice and National Integration","Legal Draftsman's Department" +"Minister of Justice and National Integration","Mediation Boards Commission" +"Minister of Justice and National Integration","National Authority for the Protection of Victims of Crime and Witnesses" +"Minister of Justice and National Integration","National Institute of Language Education and Training" +"Minister of Justice and National Integration","Non Judicial Officers Training Institute" +"Minister of Justice and National Integration","Office for National Unity and Reconciliation" +"Minister of Justice and National Integration","Office for Reparations" +"Minister of Justice and National Integration","Office of the Registrar of the Supreme Court" +"Minister of Justice and National Integration","Office on Missing Persons" +"Minister of Justice and National Integration","Official Languages Commission" +"Minister of Justice and National Integration","Sri Lanka Judges Institute" +"Minister of Justice and National Integration","Superior Courts Complex Board of Management" +"Minister of Justice and National Integration","Training Schools for Youthful Offenders" +"Minister of Labour","Department of Labour" +"Minister of Labour","Department of Manpower and Employment" +"Minister of Labour","National Institute for Occupational Safety and Health" +"Minister of Labour","National Institute of Labour Studies" +"Minister of Labour","Office of the Commissioner of Workmen's Compensation" +"Minister of Labour","Shrama Vasana Fund" +"Minister of Plantation and Community Infrastructure","Chilaw Plantation Company Ltd" +"Minister of Plantation and Community Infrastructure","Coconut Cultivation Board" +"Minister of Plantation and Community Infrastructure","Coconut Development Authority" +"Minister of Plantation and Community Infrastructure","Coconut Research Institute" +"Minister of Plantation and Community Infrastructure","Department of Rubber Development" +"Minister of Plantation and Community Infrastructure","Elkaduwa Plantation Company Ltd." +"Minister of Plantation and Community Infrastructure","Estate Sector Self-Employment Revolving Fund" +"Minister of Plantation and Community Infrastructure","Janatha Estate Development Board" +"Minister of Plantation and Community Infrastructure","Kalubovitiyana Tea Factory Ltd." +"Minister of Plantation and Community Infrastructure","Kapruka Fund" +"Minister of Plantation and Community Infrastructure","Kithul Development Board" +"Minister of Plantation and Community Infrastructure","Kurunegala Plantation Company Ltd." +"Minister of Plantation and Community Infrastructure","National Institute of Plantation Management" +"Minister of Plantation and Community Infrastructure","New Villages Development Authority for Plantation Region" +"Minister of Plantation and Community Infrastructure","Palmyrah Development Board" +"Minister of Plantation and Community Infrastructure","Plantation Human Development Trust" +"Minister of Plantation and Community Infrastructure","Rubber Research Institute" +"Minister of Plantation and Community Infrastructure","Saumyamoorthi Thondaman Memorial Foundation" +"Minister of Plantation and Community Infrastructure","Spices and Allied Products Marketing Board" +"Minister of Plantation and Community Infrastructure","Sri Lanka Cashew Corporation" +"Minister of Plantation and Community Infrastructure","Sri Lanka Rubber Manufacturing and Export Corporation" +"Minister of Plantation and Community Infrastructure","Sri Lanka State Plantation Corporation" +"Minister of Plantation and Community Infrastructure","Sri Lanka Tea Board" +"Minister of Plantation and Community Infrastructure","Tea Research Institute" +"Minister of Plantation and Community Infrastructure","Tea Shakthi Fund" +"Minister of Plantation and Community Infrastructure","Tea Small Holdings Development Authority" +"Minister of Plantation and Community Infrastructure","Tea and Rubber Estates (Control of Fragmentation) Board" +"Minister of Plantation and Community Infrastructure","Thurusaviya Fund" +"Minister of Ports and Civil Aviation","Airport and Aviation Services (Sri Lanka) Ltd." +"Minister of Ports and Civil Aviation","Ceylon Shipping Corporation Ltd." +"Minister of Ports and Civil Aviation","Civil Aviation Authority of Sri Lanka" +"Minister of Ports and Civil Aviation","Merchant Shipping Secretariat" +"Minister of Ports and Civil Aviation","Sri Lanka Ports Authority and its Subsidiaries and Associates" +"Minister of Ports and Civil Aviation","Sri Lankan Airlines and its subsidiaries " +"Minister of Public Administration, Provincial Councils and Local Government","All District Secretariats and Divisional Secretariats" +"Minister of Public Administration, Provincial Councils and Local Government","Department of Pensions" +"Minister of Public Administration, Provincial Councils and Local Government","Department of Registrar General" +"Minister of Public Administration, Provincial Councils and Local Government","Distance Learning Centre Ltd." +"Minister of Public Administration, Provincial Councils and Local Government","Local Government Service Pension Fund" +"Minister of Public Administration, Provincial Councils and Local Government","Local Government Widowers' and Orphans' Pension Fund" +"Minister of Public Administration, Provincial Councils and Local Government","Local Government Widows' and Orphans' Pension Fund" +"Minister of Public Administration, Provincial Councils and Local Government","Local Loans and Development Fund" +"Minister of Public Administration, Provincial Councils and Local Government","National Human Resources Development Council of Sri Lanka" +"Minister of Public Administration, Provincial Councils and Local Government","Public Service Pensioners' Trust Fund" +"Minister of Public Administration, Provincial Councils and Local Government","Sri Lanka Institute of Development Administration" +"Minister of Public Administration, Provincial Councils and Local Government","Sri Lanka Institute of Local Government" +"Minister of Public Security and Parliamentary Affairs","Bureau of Rehabilitation" +"Minister of Public Security and Parliamentary Affairs","Civil Security Department" +"Minister of Public Security and Parliamentary Affairs","Department of Immigration and Emigration" +"Minister of Public Security and Parliamentary Affairs","National Dangerous Drugs Control Board" +"Minister of Public Security and Parliamentary Affairs","National Police Academy" +"Minister of Public Security and Parliamentary Affairs","Sri Lanka Police" +"Minister of Rural Development, Social Security and Community Empowerment","Department of Samurdhi Development" +"Minister of Rural Development, Social Security and Community Empowerment","Department of Social Services" +"Minister of Rural Development, Social Security and Community Empowerment","Kidney Fund" +"Minister of Rural Development, Social Security and Community Empowerment","National Council for Elders and National Secretariat for Elders" +"Minister of Rural Development, Social Security and Community Empowerment","National Council for Persons with Disabilities" +"Minister of Rural Development, Social Security and Community Empowerment","National Institute of Social Development" +"Minister of Rural Development, Social Security and Community Empowerment","National Secretariat for Non Governmental Organization" +"Minister of Rural Development, Social Security and Community Empowerment","National Secretariat for Persons with Disabilities" +"Minister of Rural Development, Social Security and Community Empowerment","Partnership Secretariat for WFP Co-operation" +"Minister of Rural Development, Social Security and Community Empowerment","Rural Development Training and Research Institute" +"Minister of Rural Development, Social Security and Community Empowerment","Saubhagya Development Bureau" +"Minister of Rural Development, Social Security and Community Empowerment","Social Security Board" +"Minister of Science and Technology","Arthur C. Clarke Institute for Modern Technologies" +"Minister of Science and Technology","Centre of Excellence for Robotic Applications" +"Minister of Science and Technology","Industrial Technology Institute" +"Minister of Science and Technology","National Engineering Research And Development Centre" +"Minister of Science and Technology","National Innovation Agency" +"Minister of Science and Technology","National Institute of Fundamental Studies" +"Minister of Science and Technology","National Research Council of Sri Lanka" +"Minister of Science and Technology","National Science Foundation" +"Minister of Science and Technology","National Science and Technology Commission" +"Minister of Science and Technology","Planetarium of Sri Lanka" +"Minister of Science and Technology","Sri Lanka Atomic Energy Board" +"Minister of Science and Technology","Sri Lanka Atomic Energy Regulatory Council" +"Minister of Science and Technology","Sri Lanka Institute of Biotechnology (Pvt.) Ltd." +"Minister of Science and Technology","Sri Lanka Institute of Nanotechnology (Pvt.) Ltd." +"Minister of Science and Technology","Sri Lanka Inventors Fund" +"Minister of Science and Technology","Sri Lanka Inventors' Commission" +"Minister of Science and Technology","Sri Lanka Standards Institute" +"Minister of Science and Technology","Vidatha Centres" +"Minister of Trade, Commerce, Food Security and Cooperative Development","Consumer Affairs Authority" +"Minister of Trade, Commerce, Food Security and Cooperative Development","Cooperative Employees Commission" +"Minister of Trade, Commerce, Food Security and Cooperative Development","Cooperative Wholesale Establishment" +"Minister of Trade, Commerce, Food Security and Cooperative Development","Department of Commerce" +"Minister of Trade, Commerce, Food Security and Cooperative Development","Department of Cooperative Development (Registrar of Cooperative Societies)" +"Minister of Trade, Commerce, Food Security and Cooperative Development","Department of Measurement Units, Standards and Services" +"Minister of Trade, Commerce, Food Security and Cooperative Development","Department of the Registrar of Companies" +"Minister of Trade, Commerce, Food Security and Cooperative Development","Food Commissioner's Department" +"Minister of Trade, Commerce, Food Security and Cooperative Development","Lanka Sathosa Ltd." +"Minister of Trade, Commerce, Food Security and Cooperative Development","Mahapola Trust Fund" +"Minister of Trade, Commerce, Food Security and Cooperative Development","National Institute of Cooperative Development" +"Minister of Trade, Commerce, Food Security and Cooperative Development","National Intellectual Property Office of Sri Lanka" +"Minister of Trade, Commerce, Food Security and Cooperative Development","Regional Economic Centres" +"Minister of Trade, Commerce, Food Security and Cooperative Development","Sri Lanka Accreditation Board for Conformity Assessment" +"Minister of Trade, Commerce, Food Security and Cooperative Development","Sri Lanka State Trading (General) Corporation Ltd" +"Minister of Trade, Commerce, Food Security and Cooperative Development","Sri Lanka Thriposha Co. Ltd." +"Minister of Trade, Commerce, Food Security and Cooperative Development","State Trading Co-operative Wholesale Co. Ltd" +"Minister of Transport, Highways and Urban Development","Condominium Management Authority (Common Amenities Board)" +"Minister of Transport, Highways and Urban Development","Department of Motor Traffic" +"Minister of Transport, Highways and Urban Development","Department of Sri Lanka Railways" +"Minister of Transport, Highways and Urban Development","Lakdiva Engineering (Pvt) Ltd" +"Minister of Transport, Highways and Urban Development","Maga Neguma" +"Minister of Transport, Highways and Urban Development","National Council for Road Safety" +"Minister of Transport, Highways and Urban Development","National Physical Planning Department" +"Minister of Transport, Highways and Urban Development","National Transport Commission" +"Minister of Transport, Highways and Urban Development","National Transport Medical Institute" +"Minister of Transport, Highways and Urban Development","Road Development Authority and its subsidiaries and affiliates" +"Minister of Transport, Highways and Urban Development","Sahasya Investment Ltd." +"Minister of Transport, Highways and Urban Development","Selendiva Investments Limited" +"Minister of Transport, Highways and Urban Development","Sri Lanka Land Development Corporation and its subsidiaries and related institutions" +"Minister of Transport, Highways and Urban Development","Sri Lanka Transport Board" +"Minister of Transport, Highways and Urban Development","State Development and Construction Corporation" +"Minister of Transport, Highways and Urban Development","Urban Development Authority" +"Minister of Transport, Highways and Urban Development","Urban Settlement Development Authority" +"Minister of Women and Child Affairs","Department of Probation and Childcare Services" +"Minister of Women and Child Affairs","National Child Protection Authority" +"Minister of Women and Child Affairs","National Committee on Women" +"Minister of Women and Child Affairs","National Secretariat for Early Childhood Development" +"Minister of Women and Child Affairs","Protection of Children-National Trust Fund" +"Minister of Women and Child Affairs","Sri Lanka Women's Bureau" +"Minister of Youth Affairs and Sports","Department of Sports Development" +"Minister of Youth Affairs and Sports","Institute of Sports Medicine" +"Minister of Youth Affairs and Sports","National Centre for Leadership Development" +"Minister of Youth Affairs and Sports","National Institute of Sports Science" +"Minister of Youth Affairs and Sports","National Sports Council" +"Minister of Youth Affairs and Sports","National Youth Corps" +"Minister of Youth Affairs and Sports","National Youth Services Council" +"Minister of Youth Affairs and Sports","National Youths Services Cooperative Society Limited" +"Minister of Youth Affairs and Sports","Sri Lanka Anti-doping Agency" +"Minister of Youth Affairs and Sports","Sugathadasa National Sports Complex Authority" diff --git a/output/departments_2026_1_3_output.csv b/output/departments_2026_1_3_output.csv new file mode 100644 index 0000000..1e567ba --- /dev/null +++ b/output/departments_2026_1_3_output.csv @@ -0,0 +1,235 @@ +Ministry,Department,URL,url_2,url_3,lookup_status,lookup_error +"Minister of Agriculture, Livestock, Land and Irrigation",Agriculture and Agrarian Insurance Board,soe.lk,aib.gov.lk,srilankalaw.lk,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",Central Engineering Consultancy Bureau and its subsidiaries and affiliated companies,cecb.lk,treasury.gov.lk,parliament.lk,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",Department of Agrarian Development,agrariandept.gov.lk,agrarian.lk,doa.gov.lk,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",Department of Agriculture,doa.gov.lk,agrimin.gov.lk,agrarian.lk,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",Department of Animal Production and Health,np.gov.lk,daph.gov.lk,vet.pdn.ac.lk,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",Department of Cinnamon Development,cinnamon.gov.lk,dea.gov.lk,,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",Department of Export Agriculture,doa.gov.lk,dea.gov.lk,agrimin.gov.lk,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",Department of Irrigation,irrigation.gov.lk,irrigationmin.gov.lk,np.gov.lk,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",Department of Land Commissioner General,landcom.gov.lk,landdept.wp.gov.lk,landmin.gov.lk,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",Department of Land Title Settlement,landsettledept.gov.lk,rgd.gov.lk,landmin.gov.lk,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",Department of Land Use Policy Planning,nsdi.gov.lk,agrimin.gov.lk,cabinetoffice.gov.lk,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",Hector Kobbekaduwa Agrarian Research and Training Institute,harti.gov.lk,ips.lk,parliament.lk,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",Institute of Surveying and Mapping,ism.ac.lk,studyway.lk,survey.gov.lk,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",Land Acquisition Board of Review,landmin.gov.lk,lst.lk,srilankalaw.lk,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",Land Reform Commission,lrc.gov.lk,parliament.lk,srilankalaw.lk,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",Land Survey Council,survey.gov.lk,soe.lk,ism.ac.lk,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",Mahaweli Consultancy Bureau (Pvt) Ltd,mcb.gov.lk,auditorgeneral.gov.lk,cabinetoffice.gov.lk,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",Mahaweli Livestock Enterprise Limited,rainbowpages.lk,auditorgeneral.gov.lk,parliament.lk,ok, +"Minister of Agriculture, Livestock, Land and Irrigation","Major irrigation development projects including Uma Oya, Moragahakanda, Kalu Ganga, Gin Ganga, Nilwala, Malwathu Oya",mcb.gov.lk,irrigation.gov.lk,irrigationmin.gov.lk,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",Milco (Pvt.) Ltd.,milco.lk,soe.lk,,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",National Agricultural Diversification and Settlement Authority,hadabima.gov.lk,nfpb.lk,parliament.lk,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",National Fertilizer Secretariat,services.nfmis.nfs.gov.lk,kurunegala.dist.gov.lk,nfmis.nfs.gov.lk,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",National Hunger Eradication Campaign Board of Sri Lanka (National Food Promotion Board),nfpb.lk,parliament.lk,rainbowpages.lk,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",National Institute of Post-Harvest Management,niphm.lk,parliament.lk,agrimin.gov.lk,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",National Livestock Development Board and affiliated companies,nldb.gov.lk,parliament.lk,treasury.gov.lk,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",Paddy Marketing Board,srilankalaw.lk,hirunews.lk,,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",Sri Lanka Council for Agricultural Research Policy,slcarp.lk,plusinfo.lk,parliament.lk,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",Sri Lanka Mahaweli Authority,mahaweli.gov.lk,srilankalaw.lk,,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",State Fertilizer Company Ltd.,parliament.lk,soe.lk,rainbowpages.lk,ok, +"Minister of Agriculture, Livestock, Land and Irrigation",Survey Department of Sri Lanka,survey.gov.lk,ism.ac.lk,nsdi.gov.lk,ok, +"Minister of Buddhasasana, Religious and Cultural Affairs",Amaradeva Aesthetic and Research Centre,srilankalaw.lk,documents.gov.lk,mbrc.gov.lk,ok, +"Minister of Buddhasasana, Religious and Cultural Affairs",Buddhasasana Fund,mbs.gov.lk,auditorgeneral.gov.lk,mbrc.gov.lk,ok, +"Minister of Buddhasasana, Religious and Cultural Affairs",Buddhist Renaissance Fund,presidentsfund.gov.lk,dba.gov.lk,mbs.gov.lk,ok, +"Minister of Buddhasasana, Religious and Cultural Affairs",Central Cultural Fund,ccf.gov.lk,parliament.lk,culturaldept.gov.lk,ok, +"Minister of Buddhasasana, Religious and Cultural Affairs",Department of Archaeology,archaeology.gov.lk,hindudept.gov.lk,cahcmatara.gov.lk,ok, +"Minister of Buddhasasana, Religious and Cultural Affairs",Department of Buddhist Affairs,mbs.gov.lk,dba.gov.lk,statistics.gov.lk,ok, +"Minister of Buddhasasana, Religious and Cultural Affairs",Department of Christian Religious Affairs,christian.gov.lk,lankainformation.lk,rainbowpages.lk,ok, +"Minister of Buddhasasana, Religious and Cultural Affairs",Department of Cultural Affairs,culturaldept.gov.lk,mbrc.gov.lk,mbs.gov.lk,ok, +"Minister of Buddhasasana, Religious and Cultural Affairs",Department of Hindu Religious and Cultural Affairs,parliament.lk,mbs.gov.lk,culturaldept.gov.lk,ok, +"Minister of Buddhasasana, Religious and Cultural Affairs",Department of Muslim Religious and Cultural Affairs,muslimaffairs.gov.lk,mbs.gov.lk,parliament.lk,ok, +"Minister of Buddhasasana, Religious and Cultural Affairs",Department of National Archives,archives.gov.lk,websnew.lithium.lk,sinhala.lankainformation.lk,ok, +"Minister of Buddhasasana, Religious and Cultural Affairs",Department of National Museums,museum.gov.lk,parliament.lk,,ok, +"Minister of Buddhasasana, Religious and Cultural Affairs",Department of Public Trustee,srilankalaw.lk,ciaboc.gov.lk,parliament.lk,ok, +"Minister of Buddhasasana, Religious and Cultural Affairs",Galle Heritage Foundation,galleheritage.gov.lk,ghf.procons.lk,,ok, +"Minister of Buddhasasana, Religious and Cultural Affairs",Gramodaya Folk Arts Centre,exploresrilanka.lk,tamilguru.lk,courses.lk,ok, +"Minister of Buddhasasana, Religious and Cultural Affairs",J.R. Jayewardene Centre,jrjc.lk,,,ok, +"Minister of Buddhasasana, Religious and Cultural Affairs",Mahinda Rajapaksa National Tele Cinema Park,hirunews.lk,newswire.lk,themorning.lk,ok, +"Minister of Buddhasasana, Religious and Cultural Affairs",National Arts Council,artscouncil.lk,cmb.ac.lk,craftscouncil.gov.lk,ok, +"Minister of Buddhasasana, Religious and Cultural Affairs",National Film Corporation,sltdigitalweb.lk,plusinfo.lk,srilankalaw.lk,ok, +"Minister of Buddhasasana, Religious and Cultural Affairs",National Library and Documentation Services Board,natlib.lk,parliament.lk,isbn.lk,ok, +"Minister of Buddhasasana, Religious and Cultural Affairs",National Performing Arts Theatre (Nelum Pokuna),srilankayo.lk,,,ok, +"Minister of Buddhasasana, Religious and Cultural Affairs",Public Performance Board,soe.lk,srilankalaw.lk,parliament.lk,ok, +"Minister of Buddhasasana, Religious and Cultural Affairs",S W R D Bandaranaike National Memorial Foundation,srilankalaw.lk,,,ok, +"Minister of Buddhasasana, Religious and Cultural Affairs",Tower Hall Theatre Foundation,towerhall.lk,srilankalaw.lk,parliament.lk,ok, +"Minister of Buddhasasana, Religious and Cultural Affairs",“Ape Gama”,srilankayo.lk,srilankatravelguide.lk,craftscouncil.gov.lk,ok, +Minister of Defence,Api Wenuwen Api Fund,srilankalaw.lk,auditorgeneral.gov.lk,defence.lk,ok, +Minister of Defence,Coast Guard Department of Sri Lanka,coastguard.gov.lk,defence.lk,coastguard.navy.lk,ok, +Minister of Defence,Defence Research and Development Centre,defence.lk,cmb.ac.lk,crd.lk,ok, +Minister of Defence,Defence Services College,defencesc.lk,dscsc.lk,defence.lk,ok, +Minister of Defence,Defence Services Command and Staff College,dscsc.lk,army.lk,defence.lk,ok, +Minister of Defence,Department of Meteorology,meteo.slt.lk,nsdi.gov.lk,,ok, +Minister of Defence,Disaster Management Centre,dmc.gov.lk,desinventar.lk,,ok, +Minister of Defence,Institute of National Security Studies,defence.lk,inss.lk,,ok, +Minister of Defence,Miloda Institute - as a Faculty of Kotelawala Defence University,kdu.ac.lk,mpc.kdu.ac.lk,parliament.lk,ok, +Minister of Defence,National Authority for the Implementation of Chemical Weapons Convention,defence.lk,srilankalaw.lk,newswire.lk,ok, +Minister of Defence,National Building Research Organization,nbri.gov.lk,,,ok, +Minister of Defence,National Cadet Corps,cadet.lk,defence.lk,np.gov.lk,ok, +Minister of Defence,National Defence College,ndc.ac.lk,defence.lk,airforce.lk,ok, +Minister of Defence,National Defence Fund,defence.lk,srilankalaw.lk,army.lk,ok, +Minister of Defence,National Disaster Management Council,dmc.gov.lk,ndrsc.gov.lk,ndrsc.lk,ok, +Minister of Defence,National Disaster Relief Services Centre,ndrsc.gov.lk,ndrsc.lk,dmc.gov.lk,ok, +Minister of Defence,National Hydrographic Council ,nho.gov.lk,defence.lk,archive.navy.lk,ok, +Minister of Defence,Office of the Chief of Defence Staff,defence.lk,,,ok, +Minister of Defence,Rakna Arakshana Lanka Ltd.,rall.lk,defence.lk,auditorgeneral.gov.lk,ok, +Minister of Defence,Ranaviru Seva Authority,defence.lk,srilankalaw.lk,ranaviruseva.gov.lk,ok, +Minister of Defence,Sir John Kotelawala Defence University,kdu.ac.lk,grandroyal.lk,sundaytimes.lk,ok, +Minister of Defence,Sri Lanka Air Force,airforce.lk,airforcemuseum.lk,defence.lk,ok, +Minister of Defence,Sri Lanka Army,army.lk,defence.lk,,ok, +Minister of Defence,Sri Lanka National Hydrographic Office,nho.gov.lk,defence.lk,archive.navy.lk,ok, +Minister of Defence,Sri Lanka Navy,navy.lk,news.navy.lk,,ok, +Minister of Defence,State Intelligence Service,defence.lk,ir.kdu.ac.lk,customs.gov.lk,ok, +Minister of Digital Economy,Colombo Lotus Tower Management Co. (Pvt.) Ltd,colombolotustower.lk,lankainformation.lk,auditorgeneral.gov.lk,ok, +Minister of Digital Economy,Data Protection Authority of Sri Lanka,dpa.gov.lk,ft.lk,,ok, +Minister of Digital Economy,Department of Registration of Persons,mode.gov.lk,drp.gov.lk,adaderana.lk,ok, +Minister of Digital Economy,Information Technology Parks,icta.lk,parliament.lk,esn.ac.lk,ok, +Minister of Digital Economy,Information and Communication Technology Agency and Allied Institutions,icta.lk,mode.gov.lk,cert.gov.lk,ok, +Minister of Digital Economy,Online Safety Commission,onlinesafety.lk,parliament.lk,nisd.ac.lk,ok, +Minister of Digital Economy,Sri Lanka Computer Emergency Readiness Team,mode.gov.lk,cert.gov.lk,,ok, +Minister of Digital Economy,Sri Lanka Telecom and its Subsidiaries and Allied Institutions,slt.lk,newsfirst.lk,dailymirror.lk,ok, +Minister of Digital Economy,Telecommunication Regulatory Commission of Sri Lanka and Allied Institutions,parliament.lk,trc.gov.lk,cert.gov.lk,ok, +"Minister of Education, Higher Education and Vocational Education","All State Universities, Postgraduate Institutions and other Institutions under the purview of University Grants Commission",in.lk,mohe.gov.lk,thesrilanka.lk,ok, +"Minister of Education, Higher Education and Vocational Education",Buddhasravaka Bhikku University,busl.ac.lk,mohe.gov.lk,srilankalaw.lk,ok, +"Minister of Education, Higher Education and Vocational Education",Buddhist and Pali University of Sri Lanka,bpu.ac.lk,parliament.lk,sinhala.lankainformation.lk,ok, +"Minister of Education, Higher Education and Vocational Education",Ceylon German Technical Training Institute,germantec.lk,course.lk,courses.lk,ok, +"Minister of Education, Higher Education and Vocational Education",Department of Educational Publications,edupub.gov.lk,booxworm.lk,nie.ac.lk,ok, +"Minister of Education, Higher Education and Vocational Education",Department of Examinations,doenets.lk,results.exams.gov.lk,gazette.lk,ok, +"Minister of Education, Higher Education and Vocational Education",Department of Technical Education and Training,dtet.gov.lk,skillsmin.gov.lk,yesman.lk,ok, +"Minister of Education, Higher Education and Vocational Education",Directorates of Education,cpedu.lk,mohe.gov.lk,np.gov.lk,ok, +"Minister of Education, Higher Education and Vocational Education",National Apprenticeship and Industrial Training Authority,naita.gov.lk,studyway.lk,coursenet.lk,ok, +"Minister of Education, Higher Education and Vocational Education",National Colleges of Education,nie.ac.lk,gazette.lk,teachereducation.lk,ok, +"Minister of Education, Higher Education and Vocational Education",National Education Commission,nec.gov.lk,srilankalaw.lk,nie.ac.lk,ok, +"Minister of Education, Higher Education and Vocational Education",National Institute of Business Management and affiliated institutions,nibm.ac.lk,nibm.lk,lmd.lk,ok, +"Minister of Education, Higher Education and Vocational Education",National Institute of Education,nie.ac.lk,srilankalaw.lk,nie.lk,ok, +"Minister of Education, Higher Education and Vocational Education",Ocean University of Sri Lanka,ocu.ac.lk,,,ok, +"Minister of Education, Higher Education and Vocational Education",Piriven Education Board,moe.gov.lk,nie.ac.lk,srilankalaw.lk,ok, +"Minister of Education, Higher Education and Vocational Education",Skills Development Fund Ltd.,fat.lk,auditorgeneral.gov.lk,skillsmin.gov.lk,ok, +"Minister of Education, Higher Education and Vocational Education",South Asian Centre for Teacher Development (SACTD),sactd.edu.lk,sundaytimes.lk,slncu.lk,ok, +"Minister of Education, Higher Education and Vocational Education",Sri Lanka Institute of Advanced Technological Education,mohe.gov.lk,colombo.sliate.ac.lk,sliate.ac.lk,ok, +"Minister of Education, Higher Education and Vocational Education",Sri Lanka Inventors' Fund,slic.gov.lk,parliament.lk,dailymirror.lk,ok, +"Minister of Education, Higher Education and Vocational Education",State Printing Corporation,spclanka.gov.lk,soe.lk,moe.gov.lk,ok, +"Minister of Education, Higher Education and Vocational Education",Teachers' College,sussexttc.lk,1plusinfo.lk,gazette.lk,ok, +"Minister of Education, Higher Education and Vocational Education",Tertiary and Vocational Education Commission,tvec.gov.lk,course.vta.lk,skillsmin.gov.lk,ok, +"Minister of Education, Higher Education and Vocational Education",UNESCO National Commission of Sri Lanka,slncu.lk,news.lk,srilankalaw.lk,ok, +"Minister of Education, Higher Education and Vocational Education",University Grants Commission,mohe.gov.lk,qac.ugc.ac.lk,,ok, +"Minister of Education, Higher Education and Vocational Education",University of Vocational Technology,uovt.ac.lk,ucr.ac.lk,coursenet.lk,ok, +"Minister of Education, Higher Education and Vocational Education",Vocational Training Authority of Sri Lanka,course.vta.lk,tvec.gov.lk,skillsmin.gov.lk,ok, +Minister of Energy,Ceylon Electricity Board and its subsidiary Companies,edl.lk,ntnsp.lk,ceb.lk,ok, +Minister of Energy,Ceylon Petroleum Corporation,ceypetco.gov.lk,gazette.lk,soe.lk,ok, +Minister of Energy,Ceylon Petroleum Storage Terminal Ltd.,cpstl.lk,parliament.lk,,ok, +Minister of Energy,Electricity Distribution Lanka (Pvt) Ltd,newswire.lk,blog.govdoc.lk,pucsl.gov.lk,ok, +Minister of Energy,Electricity Generation Lanka (Pvt) Ltd,pucsl.gov.lk,ceb.lk,edl.lk,ok, +Minister of Energy,LTL Holdings (Pvt.) Ltd.,ltl.lk,ltlt.lk,lakdhanavi.lk,ok, +Minister of Energy,Lanka Coal Company (Pvt) Ltd,lankacoal.lk,auditorgeneral.gov.lk,,ok, +Minister of Energy,Lanka Electricity Company (Pvt) Ltd,ebill.leco.lk,leco.lk,rainbowpages.lk,ok, +Minister of Energy,National System Operator (Pvt) Ltd,nso.lk,ntnsp.lk,newsfirst.lk,ok, +Minister of Energy,National Transmission Network Service Provider (Pvt) Ltd,energymin.gov.lk,ntnsp.lk,ceb.lk,ok, +Minister of Energy,Petroleum Development Authority of Sri Lanka,pdasl.gov.lk,parliament.lk,island.lk,ok, +Minister of Energy,Polipto Lanka (Pvt) Ltd.,rainbowpages.lk,,,ok, +Minister of Energy,Sri Lanka Sustainable Energy Authority,energy.gov.lk,soe.lk,srilankalaw.lk,ok, +Minister of Energy,Trinco Petroleum Terminal (Pvt) Ltd,bureauveritas.lk,cpstl.lk,dailymirror.lk,ok, +Minister of Environment,Central Environmental Authority,cea.lk,env.gov.lk,,ok, +Minister of Environment,Department of Coast Conservation and Coastal Resource Management,coastal.gov.lk,env.gov.lk,,ok, +Minister of Environment,Department of Forest Conservation,env.gov.lk,forestdept.gov.lk,nsdi.gov.lk,ok, +Minister of Environment,Department of National Botanic Gardens,botanicgardens.gov.lk,env.gov.lk,slcarp.lk,ok, +Minister of Environment,Department of National Zoological Gardens,nationalzoo.gov.lk,env.gov.lk,srilankayo.lk,ok, +Minister of Environment,Department of Wildlife Conservation,env.gov.lk,dwc.gov.lk,nsdi.gov.lk,ok, +Minister of Environment,Marine Environment Protection Authority,mepa.gov.lk,env.gov.lk,parliament.lk,ok, +Minister of Environment,Sri Lanka Climate Fund (Pvt) Ltd.,climatefund.lk,env.gov.lk,parliament.lk,ok, +Minister of Environment,State Timber Corporation,treasury.gov.lk,timco.lk,env.gov.lk,ok, +Minister of Environment,Water Resources Board,env.gov.lk,irrigationmin.gov.lk,wrb.lk,ok, +"Minister of Finance, Planning and Economic Development","All State Banks, Financial Institutions, Insurance Companies and their subsidiaries and related institutions",treasury.gov.lk,fiusrilanka.gov.lk,cbsl.gov.lk,ok, +"Minister of Finance, Planning and Economic Development",Asian Game (pvt) Ltd,soe.lk,companycheck.lk,drc.gov.lk,ok, +"Minister of Finance, Planning and Economic Development",Board of Investment of Sri Lanka,dgi.gov.lk,treasury.gov.lk,application.boi.lk,ok, +"Minister of Finance, Planning and Economic Development",Canwill Holdings (Pvt) Ltd,cabinetoffice.gov.lk,auditorgeneral.gov.lk,treasury.gov.lk,ok, +"Minister of Finance, Planning and Economic Development",Central Bank of Sri Lanka,cbsl.gov.lk,fiusrilanka.gov.lk,cbsl.lk,ok, +"Minister of Finance, Planning and Economic Development",Colombo Port City Economic Commission,portcitycolombo.gov.lk,portcitycolombo.lk,srilankalaw.lk,ok, +"Minister of Finance, Planning and Economic Development",Commonwealth Game Hambantota (Pvt) Ltd,sundaytimes.lk,ft.lk,hirunews.lk,ok, +"Minister of Finance, Planning and Economic Development",Credit Information Bureau of Sri Lanka,crib.lk,cbsl.gov.lk,staging.gic.gov.lk,ok, +"Minister of Finance, Planning and Economic Development",Department of Census and Statistics,statistics.gov.lk,cbsl.gov.lk,,ok, +"Minister of Finance, Planning and Economic Development",Department of Development Finance,treasury.gov.lk,etfb.lk,gov.lk,ok, +"Minister of Finance, Planning and Economic Development",Department of Excise,excise.gov.lk,phonebook.lk,gov.lk,ok, +"Minister of Finance, Planning and Economic Development",Department of External Resources,erd.gov.lk,treasury.gov.lk,parliament.lk,ok, +"Minister of Finance, Planning and Economic Development",Department of Fiscal Policy,treasury.gov.lk,parliament.lk,gazette.lk,ok, +"Minister of Finance, Planning and Economic Development",Department of Import and Export Control,stepbysteptrade.lk,treasury.gov.lk,eohfs.health.gov.lk,ok, +"Minister of Finance, Planning and Economic Development",Department of Information Technology Management,treasury.gov.lk,uom.lk,ou.ac.lk,ok, +"Minister of Finance, Planning and Economic Development",Department of Inland Revenue,ird.gov.lk,eservices.ird.gov.lk,treasury.gov.lk,ok, +"Minister of Finance, Planning and Economic Development",Department of Legal Affairs,treasury.gov.lk,attorneygeneral.gov.lk,customs.gov.lk,ok, +"Minister of Finance, Planning and Economic Development",Department of Management Audit,treasury.gov.lk,pubad.gov.lk,dailymirror.lk,ok, +"Minister of Finance, Planning and Economic Development",Department of Management Services,treasury.gov.lk,parliament.lk,ugc.ac.lk,ok, +"Minister of Finance, Planning and Economic Development",Department of National Budget,treasury.gov.lk,ugc.ac.lk,dashboards.publicfinance.lk,ok, +"Minister of Finance, Planning and Economic Development",Department of National Planning,npd.treasury.gov.lk,nsdi.gov.lk,dmc.gov.lk,ok, +"Minister of Finance, Planning and Economic Development",Department of Project Management and Monitoring,treasury.gov.lk,mpclg.gov.lk,icome.ou.ac.lk,ok, +"Minister of Finance, Planning and Economic Development",Department of Public Enterprises,treasury.gov.lk,publicfinance.lk,ugc.ac.lk,ok, +"Minister of Finance, Planning and Economic Development",Department of Public Finance,treasury.gov.lk,publicfinance.lk,cbsl.gov.lk,ok, +"Minister of Finance, Planning and Economic Development",Department of State Accounts,treasury.gov.lk,auditorgeneral.gov.lk,parliament.lk,ok, +"Minister of Finance, Planning and Economic Development",Department of Trade and Investment Policy,treasury.gov.lk,doc.gov.lk,onetrade.lk,ok, +"Minister of Finance, Planning and Economic Development",Department of Treasury Operations,treasury.gov.lk,cbs.cbsl.lk,cdn.cse.lk,ok, +"Minister of Finance, Planning and Economic Development",Department of Valuation,mgt.sjp.ac.lk,valuationdept.gov.lk,survey.gov.lk,ok, +"Minister of Finance, Planning and Economic Development",Development Lotteries Board,dlb.lk,treasury.gov.lk,results.govdoc.lk,ok, +"Minister of Finance, Planning and Economic Development",Employees' Trust Fund,soe.lk,etfb.lk,gazette.lk,ok, +"Minister of Finance, Planning and Economic Development",Gambling Regulatory Authority,parliament.lk,cabinetoffice.gov.lk,,ok, +"Minister of Finance, Planning and Economic Development",General Treasury,treasury.gov.lk,gazette.lk,cbsl.gov.lk,ok, +"Minister of Finance, Planning and Economic Development",Hotel Developers (Lanka) PLC (PQ 143),hoteldevelopers.lk,treasury.gov.lk,cdn.cse.lk,ok, +"Minister of Finance, Planning and Economic Development",Housing Development Finance Corporation,cdn.cse.lk,hdfc.lk,,ok, +"Minister of Finance, Planning and Economic Development",Institute of Policy Studies,ips.lk,parliament.lk,,ok, +"Minister of Finance, Planning and Economic Development",Institutions coming under the Revival (Removal) of Underperforming Enterprises or Underutilized Assets Act vested to the Secretary to the Treasury,parliament.lk,muragala.lk,treasury.gov.lk,ok, +"Minister of Finance, Planning and Economic Development",Insurance Regulatory Commission of Sri Lanka,ircsl.gov.lk,insuranceombudsman.lk,gov.lk,ok, +"Minister of Finance, Planning and Economic Development",Lady Lochore Fund,lllf.gov.lk,lochorefund.gov.lk,srilankalaw.lk,ok, +"Minister of Finance, Planning and Economic Development",Lanka Fabric Ltd,soe.lk,treasury.gov.lk,,ok, +"Minister of Finance, Planning and Economic Development",Magampura Port Management Company (Pvt) Ltd,hipg.lk,slpa.lk,beijing.embassy.gov.lk,ok, +"Minister of Finance, Planning and Economic Development",Mihin Lanka (Pvt) Ltd,soe.lk,parliament.lk,,ok, +"Minister of Finance, Planning and Economic Development",National Credit Guarantee Institution Limited,ncgil.lk,treasury.gov.lk,index.lk,ok, +"Minister of Finance, Planning and Economic Development",National Insurance Trust Fund,nitf.lk,srilankalaw.lk,childwomenmin.gov.lk,ok, +"Minister of Finance, Planning and Economic Development",National Lotteries Board,jayaway.lk,results.govdoc.lk,dlb.lk,ok, +"Minister of Finance, Planning and Economic Development",Office of Comptroller General,treasury.gov.lk,parliament.lk,ugc.ac.lk,ok, +"Minister of Finance, Planning and Economic Development",Peliyagoda warehouse,slpa.lk,,,ok, +"Minister of Finance, Planning and Economic Development",Provident Property Lanka Ltd - Institution being reviewed,providentcapital.lk,treasury.gov.lk,island.lk,ok, +"Minister of Finance, Planning and Economic Development",Public Debt Management Office,treasury.gov.lk,cbsl.gov.lk,,ok, +"Minister of Finance, Planning and Economic Development",Public Service Mutual Provident Fund,srilankalaw.lk,naosl.gov.lk,auditorgeneral.gov.lk,ok, +"Minister of Finance, Planning and Economic Development",Public Utilities Commission of Sri Lanka,parliament.lk,srilankalaw.lk,pucsl.gov.lk,ok, +"Minister of Finance, Planning and Economic Development",Regional Development Bank,rdb.lk,soe.lk,,ok, +"Minister of Finance, Planning and Economic Development",Securities and Exchange Commission of Sri Lanka,sec.gov.lk,mgt.sjp.ac.lk,srilankalaw.lk,ok, +"Minister of Finance, Planning and Economic Development",Sri Lanka Accounting and Auditing Standard Monitoring Board,slaasc.lk,slaasmb.gov.lk,auditorgeneral.gov.lk,ok, +"Minister of Finance, Planning and Economic Development",Sri Lanka Customs,customs.gov.lk,,,ok, +"Minister of Finance, Planning and Economic Development",Sri Lanka Export Credit Insurance Corporation,nationalchamber.lk,slecic.lk,parliament.lk,ok, +"Minister of Finance, Planning and Economic Development",Sri Lanka Insurance Corporation and its subsidiaries and affiliated companies,auditorgeneral.gov.lk,treasury.gov.lk,,ok, +"Minister of Finance, Planning and Economic Development",State Mortgage and Investment Bank,smib.lk,soe.lk,nationalchamber.lk,ok, +"Minister of Finance, Planning and Economic Development",State Resources Management Corporation,soe.lk,treasury.gov.lk,lankainformation.lk,ok, +"Minister of Finance, Planning and Economic Development",Strategic Enterprises Management Agency,lankainformation.lk,contacts.lk,rainbowpages.lk,ok, +"Minister of Finance, Planning and Economic Development","Strike, Riot, Civil Commotion and Terrorism Fund",nitf.lk,cabinetoffice.gov.lk,soe.lk,ok, +"Minister of Finance, Planning and Economic Development",Sustainable Development Council,sdc.gov.lk,data.sdg.lk,,ok, +"Minister of Finance, Planning and Economic Development",Tax Appeals Commission,ird.gov.lk,treasury.gov.lk,srilankalaw.lk,ok, +"Minister of Finance, Planning and Economic Development",Techno Park Development Company (Pvt.) Limited,sundaytimes.lk,parliament.lk,esn.ac.lk,ok, +"Minister of Finance, Planning and Economic Development",Welfare Benefits Board,wbb.gov.lk,ssb.gov.lk,hirunews.lk,ok, +"Minister of Fisheries, Aquatic and Ocean Resources",Cey-Nor Foundation Ltd.,ceynor.gov.lk,parliament.lk,cabinetoffice.gov.lk,ok, +"Minister of Fisheries, Aquatic and Ocean Resources",Ceylon Fisheries Corporation,cfc.gov.lk,fisheries.gov.lk,soe.lk,ok, +"Minister of Fisheries, Aquatic and Ocean Resources",Ceylon Fishery Harbours Corporation,cfc.gov.lk,soe.lk,parliament.lk,ok, +"Minister of Fisheries, Aquatic and Ocean Resources",Department of Fisheries and Aquatic Resources,fisheriesdept.gov.lk,fisheries.gov.lk,,ok, +"Minister of Fisheries, Aquatic and Ocean Resources",National Aquaculture Development Authority,naqda.gov.lk,fisheries.gov.lk,parliament.lk,ok, +"Minister of Fisheries, Aquatic and Ocean Resources",National Aquatic Resources Research and Development Agency,nara.ac.lk,parliament.lk,govpay.lk,ok, +"Minister of Fisheries, Aquatic and Ocean Resources",North Sea Ltd,northsea.lk,soe.lk,auditorgeneral.gov.lk,ok, +"Minister of Foreign Affairs, Foreign Employment and Tourism",Diplomatic Missions in abroad,sltda.gov.lk,mfa.gov.lk,,ok, +"Minister of Foreign Affairs, Foreign Employment and Tourism",Foreign Employment Agency of Sri Lanka (Pvt.) Ltd.,rainbowpages.lk,sonaklanka.lk,slfea.lk,ok, +"Minister of Foreign Affairs, Foreign Employment and Tourism",Lakshman Kadirgamar Institute for International Relations and Strategic Studies,lki.lk,srilankalaw.lk,,ok, +"Minister of Foreign Affairs, Foreign Employment and Tourism",National Oceanic Affairs Committee Secretariat,parliament.lk,sdc.gov.lk,,ok, +"Minister of Foreign Affairs, Foreign Employment and Tourism",Sri Lanka Convention Bureau,env.gov.lk,,,ok, +"Minister of Foreign Affairs, Foreign Employment and Tourism",Sri Lanka Foreign Employment Bureau,mfa.gov.lk,employers.lk,slbfe.lk,ok, +"Minister of Foreign Affairs, Foreign Employment and Tourism",Sri Lanka Institute of Tourism and Hotel Management,slithm.edu.lk,chsga.lk,coursenet.lk,ok, +"Minister of Foreign Affairs, Foreign Employment and Tourism",Sri Lanka Tourism Development Authority,sltda.gov.lk,uat.sltda.gov.lk,nsdi.gov.lk,ok, +"Minister of Foreign Affairs, Foreign Employment and Tourism",Sri Lanka Tourism Promotion Bureau,sltda.gov.lk,,,ok, +Minister of Health and Mass Media,1990 Suwaseriya Foundation,1990.lk,srilankalaw.lk,parliament.lk,ok, +Minister of Health and Mass Media,"All National, Teaching and Specific Government Hospitals",health.gov.lk,previousmoh.health.gov.lk,aialife.com.lk,ok, +Minister of Health and Mass Media,Ashraff Memorial Hospital,amhkalmunai.lk,link.lk,ampara.dist.gov.lk,ok, +Minister of Health and Mass Media,Associated Newspapers of Ceylon Ltd.,lakehouse.lk,media.gov.lk,parliament.lk,ok, +Minister of Health and Mass Media,Ayurveda Education and Hospital Board,apti.edu.lk,pgiimed.cmb.ac.lk,gamoa.lk,ok, +Minister of Health and Mass Media,Ayurveda Teaching and Research Hospitals,ayurveda.gov.lk,gamoa.lk,ayurveda.cp.gov.lk,ok, +Minister of Health and Mass Media,Ayurvedic Medical Council,slmc.gov.lk,parliament.lk,lankainformation.lk,ok, +Minister of Health and Mass Media,Department of Ayurveda,ayurveda.wp.gov.lk,cp.gov.lk,fim.cmb.ac.lk,ok, +Minister of Health and Mass Media,Department of Government Information,dgi.gov.lk,media.gov.lk,gov.lk,ok, +Minister of Health and Mass Media,Department of Government Printing,media.gov.lk,documents.gov.lk,sinhala.media.gov.lk,ok, +Minister of Health and Mass Media,Department of Health Services,health.gov.lk,healthdept.wp.gov.lk,gazette.lk,ok, +Minister of Health and Mass Media,"Homeopathy Hospital, Welisara",parliament.lk,newswire.lk,slhmc.lk,ok, +Minister of Health and Mass Media,Homeopathy Medical Council,slhmc.lk,parliament.lk,slmc.gov.lk,ok, +Minister of Health and Mass Media,Independent Television Network,itn.lk,media.gov.lk,ten.lk,ok, diff --git a/output/departments_2026_2_3_output.csv b/output/departments_2026_2_3_output.csv new file mode 100644 index 0000000..a5e55e4 --- /dev/null +++ b/output/departments_2026_2_3_output.csv @@ -0,0 +1,236 @@ +Ministry,Department,URL,url_2,url_3,lookup_status,lookup_error +Minister of Health and Mass Media,Lanka Puwath Ltd,puwath.lk,soe.lk,companycheck.lk,ok, +Minister of Health and Mass Media,Medical Research Institute,mri.gov.lk,lankainformation.lk,sinhala.lankainformation.lk,ok, +Minister of Health and Mass Media,National Authority on Tobacco and Alcohol,nddcb.gov.lk,alcohol.lk,cct.lk,ok, +Minister of Health and Mass Media,National Health Council,nrc.gov.lk,health.gov.lk,ncmh.lk,ok, +Minister of Health and Mass Media,National Health Development Fund,parliament.lk,srilankalaw.lk,health.gov.lk,ok, +Minister of Health and Mass Media,National Institute of Health Sciences,elearn.health.gov.lk,sinhala.lankainformation.lk,,ok, +Minister of Health and Mass Media,"National Institute of Nephrology, Dialysis and Transplantation",nindt.health.gov.lk,lankainformation.lk,,ok, +Minister of Health and Mass Media,National Medicines Regulatory Authority,nmra.gov.lk,srilankalaw.lk,,ok, +Minister of Health and Mass Media,Postal Department,slpost.gov.lk,media.gov.lk,dev.slpost.lk,ok, +Minister of Health and Mass Media,Private Health Services Regulatory Council,phsrc.lk,health.gov.lk,healthdept.wp.gov.lk,ok, +Minister of Health and Mass Media,Right to Information Commission,rticommission.lk,rti.gov.lk,rtisrilanka.lk,ok, +Minister of Health and Mass Media,School of Medical Laboratory Technology,mri.gov.lk,coursenet.lk,ou.ac.lk,ok, +Minister of Health and Mass Media,Selacine Media Solutions (PVT) LTD,media.gov.lk,plusinfo.lk,island.lk,ok, +Minister of Health and Mass Media,Sri Jayewardenepura General Hospital,sjgh.health.gov.lk,parliament.lk,srilankalaw.lk,ok, +Minister of Health and Mass Media,Sri Lanka Ayurvedic Drugs Corporation,sladc.lk,soe.lk,rainbowpages.lk,ok, +Minister of Health and Mass Media,Sri Lanka Broadcasting Corporation,media.gov.lk,slbc.lk,sinhala.media.gov.lk,ok, +Minister of Health and Mass Media,Sri Lanka Foundation,slf.lk,fat.lk,,ok, +Minister of Health and Mass Media,Sri Lanka Institute of Printing,sliop.edu.lk,fat.lk,,ok, +Minister of Health and Mass Media,Sri Lanka Media Training Institute,slpi.lk,coursenet.lk,nibm.ac.lk,ok, +Minister of Health and Mass Media,Sri Lanka Medical College Council,slmc.gov.lk,cmcc.lk,mc.lk,ok, +Minister of Health and Mass Media,Sri Lanka Medical Council,slmc.gov.lk,mc.lk,,ok, +Minister of Health and Mass Media,Sri Lanka Nursing Council,slnc.lk,,,ok, +Minister of Health and Mass Media,Sri Lanka Press Council,media.gov.lk,slpc.lk,,ok, +Minister of Health and Mass Media,Sri Lanka Rupavahini Corporation,rupavahini.lk,media.gov.lk,tv.rupavahini.lk,ok, +Minister of Health and Mass Media,State Pharmaceutical Corporation,spc.lk,spmc.gov.lk,soe.lk,ok, +Minister of Health and Mass Media,State Pharmaceutical Manufacturing Corporation,spmc.gov.lk,spc.lk,soe.lk,ok, +Minister of Health and Mass Media,Vijaya Kumaratunga Memorial Hospital,health.gov.lk,parliament.lk,srilankalaw.lk,ok, +"Minister of Housing, Construction and Water Supply",Building Material Corporation Limited,rainbowpages.lk,soe.lk,auditorgeneral.gov.lk,ok, +"Minister of Housing, Construction and Water Supply",Construction Guarantee Fund,cgf.gov.lk,cgf.brama.lk,rainbowpages.lk,ok, +"Minister of Housing, Construction and Water Supply",Construction Industry Development Authority,cida.gov.lk,srilankalaw.lk,rainbowpages.lk,ok, +"Minister of Housing, Construction and Water Supply",Department of Buildings,buildings.gov.lk,lankainformation.lk,contacts.lk,ok, +"Minister of Housing, Construction and Water Supply",Department of Government Factories,govtfactory.gov.lk,sinhala.lankainformation.lk,,ok, +"Minister of Housing, Construction and Water Supply",Department of National Community Water Supply,dncws.lk,waterboard.lk,web.rwss.lk,ok, +"Minister of Housing, Construction and Water Supply",Engineering Council of Sri Lanka,ecsl.gov.lk,iiesl.lk,iesl.lk,ok, +"Minister of Housing, Construction and Water Supply",National Equipment and Machinery Organization,cabinetoffice.gov.lk,moudh.gov.lk,,ok, +"Minister of Housing, Construction and Water Supply",National Housing Development Authority,nhda.gov.lk,lankainformation.lk,uda.gov.lk,ok, +"Minister of Housing, Construction and Water Supply",National Water Supply and Drainage Board,waterboard.lk,nsdi.gov.lk,ten.lk,ok, +"Minister of Housing, Construction and Water Supply",Ocean View Development (Pvt) Ltd.,soe.lk,rainbowpages.lk,naosl.gov.lk,ok, +"Minister of Housing, Construction and Water Supply",State Engineering Corporation,secsl.gov.lk,soe.lk,ecsl.gov.lk,ok, +Minister of Industry and Entrepreneurship Development,BCC Lanka Limited,bcc.lk,parliament.lk,nationalchamber.lk,ok, +Minister of Industry and Entrepreneurship Development,Ceylon Ceramics Corporation (Brick and Tiles Division),parliament.lk,rainbowpages.lk,,ok, +Minister of Industry and Entrepreneurship Development,Ceylon Industrial Development Board,idb.gov.lk,industry.gov.lk,,ok, +Minister of Industry and Entrepreneurship Development,Department of Textile Industries,bizconnect.idb.gov.lk,moi.cp.gov.lk,parliament.lk,ok, +Minister of Industry and Entrepreneurship Development,GSMB Technical Services (Pvt) Ltd.,env.gov.lk,constructiondirectory.lk,,ok, +Minister of Industry and Entrepreneurship Development,Galoya Plantation (Pvt.) Company,galoya.lk,,,ok, +Minister of Industry and Entrepreneurship Development,Gem and Jewellery Research and Training Institute,gjrti.gov.lk,ngja.gov.lk,guidance.nie.ac.lk,ok, +Minister of Industry and Entrepreneurship Development,Geological Survey and Mines Bureau,gsmb.gov.lk,env.gov.lk,gazette.lk,ok, +Minister of Industry and Entrepreneurship Development,Hingurana Sugar Industry Ltd.,rainbowpages.lk,galoya.lk,,ok, +Minister of Industry and Entrepreneurship Development,Kahatagaha Graphite Lanka Ltd,soe.lk,kgraphite.lk,,ok, +Minister of Industry and Entrepreneurship Development,Kantale Sugar Company Ltd.,sundaytimes.lk,ceylontoday.lk,,ok, +Minister of Industry and Entrepreneurship Development,Lanka Cement Ltd,soe.lk,nationalchamber.lk,,ok, +Minister of Industry and Entrepreneurship Development,Lanka Leyland (Pvt) Ltd.,lal.lk,soe.lk,auditorgeneral.gov.lk,ok, +Minister of Industry and Entrepreneurship Development,Lanka Mineral Sands Company,lankainformation.lk,industry.gov.lk,soe.lk,ok, +Minister of Industry and Entrepreneurship Development,Lanka Phosphate Limited,lpl.lk,parliament.lk,treasury.gov.lk,ok, +Minister of Industry and Entrepreneurship Development,Lanka Salusala Ltd,soe.lk,auditorgeneral.gov.lk,rainbowpages.lk,ok, +Minister of Industry and Entrepreneurship Development,Lanka Sugar Company (Pvt.) Ltd.,lankasugar.lk,rainbowpages.lk,,ok, +Minister of Industry and Entrepreneurship Development,Lanka Textile Mills Emporium Ltd.,newasia.lk,,,ok, +Minister of Industry and Entrepreneurship Development,National Crafts Council,craftscouncil.gov.lk,industry.gov.lk,,ok, +Minister of Industry and Entrepreneurship Development,National Design Centre,slndc.gov.lk,,,ok, +Minister of Industry and Entrepreneurship Development,National Enterprise Development Authority,neda.gov.lk,industry.gov.lk,sundaytimes.lk,ok, +Minister of Industry and Entrepreneurship Development,National Gem and Jewellery Authority,ngja.gov.lk,govpay.lk,,ok, +Minister of Industry and Entrepreneurship Development,National Paper Corporation Ltd.,npc.lk,parliament.lk,cabinetoffice.gov.lk,ok, +Minister of Industry and Entrepreneurship Development,National Productivity Secretariat,productivity.lk,industry.gov.lk,cabinetoffice.gov.lk,ok, +Minister of Industry and Entrepreneurship Development,National Salt Limited,nationalsalt.lk,industry.gov.lk,lankasalt.lk,ok, +Minister of Industry and Entrepreneurship Development,Paranthan Chemicals Ltd,pccl.lk,industry.gov.lk,rainbowpages.lk,ok, +Minister of Industry and Entrepreneurship Development,Small Enterprise Development Division,industry.gov.lk,neda.gov.lk,sed.gov.lk,ok, +Minister of Industry and Entrepreneurship Development,Small and Medium Enterprises Authority,neda.gov.lk,industry.gov.lk,fccisl.lk,ok, +Minister of Industry and Entrepreneurship Development,Small and Medium Enterprises Venture Capital Company,ips.lk,,,ok, +Minister of Industry and Entrepreneurship Development,Sri Lanka Cement Corporation,rainbowpages.lk,ceylontoday.lk,auditorgeneral.gov.lk,ok, +Minister of Industry and Entrepreneurship Development,Sri Lanka Export Development Board,oman.embassy.gov.lk,exporter.edb.gov.lk,idb.gov.lk,ok, +Minister of Industry and Entrepreneurship Development,Sri Lanka Handicraft Board (Laksala),soe.lk,craftscouncil.gov.lk,rainbowpages.lk,ok, +Minister of Industry and Entrepreneurship Development,Sri Lanka Institute of Textile and Apparels,slita.lk,ou.ac.lk,parliament.lk,ok, +Minister of Industry and Entrepreneurship Development,Sugar Cane Research Institute,sugarres.lk,lankainformation.lk,sinhala.lankainformation.lk,ok, +Minister of Industry and Entrepreneurship Development,Timber-related Design Centre,science.sjp.ac.lk,sjp.ac.lk,timco.lk,ok, +Minister of Justice and National Integration,Attorney General's Department,attorneygeneral.gov.lk,parliament.lk,moj.gov.lk,ok, +Minister of Justice and National Integration,Commercial Mediation Centre of Sri Lanka,moj.gov.lk,srilankalaw.lk,cmac.lk,ok, +Minister of Justice and National Integration,Community Based Correction Department,moj.gov.lk,blog.govdoc.lk,parliament.lk,ok, +Minister of Justice and National Integration,Council of Legal Education,moj.gov.lk,sllc.ac.lk,srilankalaw.lk,ok, +Minister of Justice and National Integration,Department of Debt Conciliation Board,moj.gov.lk,srilankalaw.lk,parliament.lk,ok, +Minister of Justice and National Integration,Department of Government Analyst,analyst.gov.lk,moj.gov.lk,gazette.lk,ok, +Minister of Justice and National Integration,Department of Official Languages,moj.gov.lk,languagesdept.gov.lk,parliament.lk,ok, +Minister of Justice and National Integration,Department of Prisons,prisons.gov.lk,moj.gov.lk,visit.prisons.gov.lk,ok, +Minister of Justice and National Integration,Law Commission of Sri Lanka,lawcom.gov.lk,moj.gov.lk,srilankalaw.lk,ok, +Minister of Justice and National Integration,Legal Aid Commission of Sri Lanka,moj.gov.lk,parliament.lk,srilankalaw.lk,ok, +Minister of Justice and National Integration,Legal Draftsman's Department,ld.gov.lk,moj.gov.lk,governmentjob.lk,ok, +Minister of Justice and National Integration,Mediation Boards Commission,moj.gov.lk,mediation.gov.lk,srilankalaw.lk,ok, +Minister of Justice and National Integration,National Authority for the Protection of Victims of Crime and Witnesses,napvcw.gov.lk,moj.gov.lk,parliament.lk,ok, +Minister of Justice and National Integration,National Institute of Language Education and Training,moj.gov.lk,fat.lk,nilet.gov.lk,ok, +Minister of Justice and National Integration,Non Judicial Officers Training Institute,judgesinstitute.lk,moj.gov.lk,parliament.lk,ok, +Minister of Justice and National Integration,Office for National Unity and Reconciliation,onur.gov.lk,moj.gov.lk,srilankalaw.lk,ok, +Minister of Justice and National Integration,Office for Reparations,reparations.gov.lk,moj.gov.lk,srilankalaw.lk,ok, +Minister of Justice and National Integration,Office of the Registrar of the Supreme Court,moj.gov.lk,testing.sltdigitalweb.lk,supremecourt.lk,ok, +Minister of Justice and National Integration,Office on Missing Persons,omp.gov.lk,moj.gov.lk,applications.lk,ok, +Minister of Justice and National Integration,Official Languages Commission,moj.gov.lk,languagesdept.gov.lk,olc.gov.lk,ok, +Minister of Justice and National Integration,Sri Lanka Judges Institute,judgesinstitute.lk,lankainformation.lk,moj.gov.lk,ok, +Minister of Justice and National Integration,Superior Courts Complex Board of Management,srilankalaw.lk,moj.gov.lk,naosl.gov.lk,ok, +Minister of Justice and National Integration,Training Schools for Youthful Offenders,srilankalaw.lk,prisons.gov.lk,parliament.lk,ok, +Minister of Labour,Department of Labour,labourdept.gov.lk,labourmin.gov.lk,dme.lk,ok, +Minister of Labour,Department of Manpower and Employment,dme.lk,labourmin.gov.lk,labourdept.gov.lk,ok, +Minister of Labour,National Institute for Occupational Safety and Health,niosh.gov.lk,eohfs.health.gov.lk,,ok, +Minister of Labour,National Institute of Labour Studies,labourmin.gov.lk,nils.gov.lk,nils.lk,ok, +Minister of Labour,Office of the Commissioner of Workmen's Compensation,compensation.gov.lk,labourmin.gov.lk,myoffers.lk,ok, +Minister of Labour,Shrama Vasana Fund,svf.gov.lk,auditorgeneral.gov.lk,ft.lk,ok, +Minister of Plantation and Community Infrastructure,Chilaw Plantation Company Ltd,cpl.gov.lk,cesu.lk,soe.lk,ok, +Minister of Plantation and Community Infrastructure,Coconut Cultivation Board,marketplace.coconutsrilanka.lk,cda.gov.lk,cri.gov.lk,ok, +Minister of Plantation and Community Infrastructure,Coconut Development Authority,cda.gov.lk,ccb.lk,,ok, +Minister of Plantation and Community Infrastructure,Coconut Research Institute,cri.gov.lk,cda.gov.lk,parliament.lk,ok, +Minister of Plantation and Community Infrastructure,Department of Rubber Development,rubberdev.gov.lk,rrisl.gov.lk,lankainformation.lk,ok, +Minister of Plantation and Community Infrastructure,Elkaduwa Plantation Company Ltd.,elkaduwaplantations.lk,cesu.lk,plantation.gov.lk,ok, +Minister of Plantation and Community Infrastructure,Estate Sector Self-Employment Revolving Fund,etfb.lk,slbfe.lk,plantation.gov.lk,ok, +Minister of Plantation and Community Infrastructure,Janatha Estate Development Board,jedb.lk,cesu.lk,soe.lk,ok, +Minister of Plantation and Community Infrastructure,Kalubovitiyana Tea Factory Ltd.,kalubowitiyanatea.lk,cesu.lk,soe.lk,ok, +Minister of Plantation and Community Infrastructure,Kapruka Fund,srilankalaw.lk,iuris.lk,,ok, +Minister of Plantation and Community Infrastructure,Kithul Development Board,kdb.gov.lk,ft.lk,,ok, +Minister of Plantation and Community Infrastructure,Kurunegala Plantation Company Ltd.,kurunegalaplantations.lk,cesu.lk,soe.lk,ok, +Minister of Plantation and Community Infrastructure,National Institute of Plantation Management,nipm.gov.lk,srilankalaw.lk,job.govdoc.lk,ok, +Minister of Plantation and Community Infrastructure,New Villages Development Authority for Plantation Region,plantation.gov.lk,srilankalaw.lk,cabinetoffice.gov.lk,ok, +Minister of Plantation and Community Infrastructure,Palmyrah Development Board,pdb.gov.lk,plantation.gov.lk,doc.gov.lk,ok, +Minister of Plantation and Community Infrastructure,Plantation Human Development Trust,phdt.lk,ceylontoday.lk,,ok, +Minister of Plantation and Community Infrastructure,Rubber Research Institute,rrisl.gov.lk,parliament.lk,,ok, +Minister of Plantation and Community Infrastructure,Saumyamoorthi Thondaman Memorial Foundation,documents.gov.lk,parliament.lk,srilankalaw.lk,ok, +Minister of Plantation and Community Infrastructure,Spices and Allied Products Marketing Board,plantation.gov.lk,ft.lk,rainbowpages.lk,ok, +Minister of Plantation and Community Infrastructure,Sri Lanka Cashew Corporation,cashew.gov.lk,soe.lk,kaju.lk,ok, +Minister of Plantation and Community Infrastructure,Sri Lanka Rubber Manufacturing and Export Corporation,slamerp.lk,soe.lk,parliament.lk,ok, +Minister of Plantation and Community Infrastructure,Sri Lanka State Plantation Corporation,slspc.lk,treasury.gov.lk,parliament.lk,ok, +Minister of Plantation and Community Infrastructure,Sri Lanka Tea Board,srilankateaboard.lk,ceylontea.gov.lk,,ok, +Minister of Plantation and Community Infrastructure,Tea Research Institute,tri.lk,srilankateaboard.lk,cesu.lk,ok, +Minister of Plantation and Community Infrastructure,Tea Shakthi Fund,srilankalaw.lk,cesu.lk,,ok, +Minister of Plantation and Community Infrastructure,Tea Small Holdings Development Authority,plantation.gov.lk,srilankalaw.lk,,ok, +Minister of Plantation and Community Infrastructure,Tea and Rubber Estates (Control of Fragmentation) Board,plantation.gov.lk,srilankalaw.lk,cabinetoffice.gov.lk,ok, +Minister of Plantation and Community Infrastructure,Thurusaviya Fund,parliament.lk,srilankalaw.lk,gazette.lk,ok, +Minister of Ports and Civil Aviation,Airport and Aviation Services (Sri Lanka) Ltd.,airport.lk,soe.lk,caa.lk,ok, +Minister of Ports and Civil Aviation,Ceylon Shipping Corporation Ltd.,cscl.lk,nationalchamber.lk,,ok, +Minister of Ports and Civil Aviation,Civil Aviation Authority of Sri Lanka,caa.lk,transport.gov.lk,,ok, +Minister of Ports and Civil Aviation,Merchant Shipping Secretariat,dgshipping.gov.lk,,,ok, +Minister of Ports and Civil Aviation,Sri Lanka Ports Authority and its Subsidiaries and Associates,slpa.lk,soe.lk,,ok, +Minister of Ports and Civil Aviation,Sri Lankan Airlines and its subsidiaries ,treasury.gov.lk,,,ok, +"Minister of Public Administration, Provincial Councils and Local Government",All District Secretariats and Divisional Secretariats,induwara.lk,,,ok, +"Minister of Public Administration, Provincial Councils and Local Government",Department of Pensions,beijing.embassy.gov.lk,dialog.lk,service.pensions.gov.lk,ok, +"Minister of Public Administration, Provincial Councils and Local Government",Department of Registrar General,rgd.gov.lk,drc.gov.lk,drp.gov.lk,ok, +"Minister of Public Administration, Provincial Councils and Local Government",Distance Learning Centre Ltd.,studyway.lk,,,ok, +"Minister of Public Administration, Provincial Councils and Local Government",Local Government Service Pension Fund,auditorgeneral.gov.lk,service.pensions.gov.lk,gazette.lk,ok, +"Minister of Public Administration, Provincial Councils and Local Government",Local Government Widowers' and Orphans' Pension Fund,srilankalaw.lk,auditorgeneral.gov.lk,pubad.gov.lk,ok, +"Minister of Public Administration, Provincial Councils and Local Government",Local Government Widows' and Orphans' Pension Fund,srilankalaw.lk,,,ok, +"Minister of Public Administration, Provincial Councils and Local Government",Local Loans and Development Fund,lldf.gov.lk,parliament.lk,plusinfo.lk,ok, +"Minister of Public Administration, Provincial Councils and Local Government",National Human Resources Development Council of Sri Lanka,srilankalaw.lk,nhrdc.gov.lk,parliament.lk,ok, +"Minister of Public Administration, Provincial Councils and Local Government",Public Service Pensioners' Trust Fund,srilankalaw.lk,documents.gov.lk,,ok, +"Minister of Public Administration, Provincial Councils and Local Government",Sri Lanka Institute of Development Administration,slida.lk,npa.gov.lk,sinhala.lankainformation.lk,ok, +"Minister of Public Administration, Provincial Councils and Local Government",Sri Lanka Institute of Local Government,coursenet.lk,gov.lk,studyway.lk,ok, +Minister of Public Security and Parliamentary Affairs,Bureau of Rehabilitation,bor.gov.lk,moj.gov.lk,parliament.lk,ok, +Minister of Public Security and Parliamentary Affairs,Civil Security Department,lankainformation.lk,defence.lk,csd.lk,ok, +Minister of Public Security and Parliamentary Affairs,Department of Immigration and Emigration,immigration.gov.lk,gazette.lk,lankainformation.lk,ok, +Minister of Public Security and Parliamentary Affairs,National Dangerous Drugs Control Board,nddcb.gov.lk,parliament.lk,,ok, +Minister of Public Security and Parliamentary Affairs,National Police Academy,police.lk,npa.gov.lk,srilankalaw.lk,ok, +Minister of Public Security and Parliamentary Affairs,Sri Lanka Police,police.lk,gazette.lk,ezofz.web.lk,ok, +"Minister of Rural Development, Social Security and Community Empowerment",Department of Samurdhi Development,dsd.samurdhi.gov.lk,samurdhi.gov.lk,mrds.gov.lk,ok, +"Minister of Rural Development, Social Security and Community Empowerment",Department of Social Services,socialservices.gov.lk,ssd.wp.gov.lk,gov.lk,ok, +"Minister of Rural Development, Social Security and Community Empowerment",Kidney Fund,epf.lk,nspd.gov.lk,karuna.lk,ok, +"Minister of Rural Development, Social Security and Community Empowerment",National Council for Elders and National Secretariat for Elders,srilankaeldercare.gov.lk,mrds.gov.lk,srilankalaw.lk,ok, +"Minister of Rural Development, Social Security and Community Empowerment",National Council for Persons with Disabilities,nspd.gov.lk,mrds.gov.lk,ir.kdu.ac.lk,ok, +"Minister of Rural Development, Social Security and Community Empowerment",National Institute of Social Development,nisd.ac.lk,mrds.gov.lk,,ok, +"Minister of Rural Development, Social Security and Community Empowerment",National Secretariat for Non Governmental Organization,,,,error,No results found. +"Minister of Rural Development, Social Security and Community Empowerment",National Secretariat for Persons with Disabilities,mrds.gov.lk,nspd.gov.lk,socialservices.gov.lk,ok, +"Minister of Rural Development, Social Security and Community Empowerment",Partnership Secretariat for WFP Co-operation,mrds.gov.lk,,,ok, +"Minister of Rural Development, Social Security and Community Empowerment",Rural Development Training and Research Institute,rdtri.gov.lk,mrds.gov.lk,harti.gov.lk,ok, +"Minister of Rural Development, Social Security and Community Empowerment",Saubhagya Development Bureau,mrds.gov.lk,rdb.gov.lk,srisaubhagya.lk,ok, +"Minister of Rural Development, Social Security and Community Empowerment",Social Security Board,ssb.gov.lk,socialsecurity.lk,mrds.gov.lk,ok, +Minister of Science and Technology,Arthur C. Clarke Institute for Modern Technologies,accimt.ac.lk,most.gov.lk,,ok, +Minister of Science and Technology,Centre of Excellence for Robotic Applications,mode.gov.lk,iesl.lk,crd.lk,ok, +Minister of Science and Technology,Industrial Technology Institute,iti.lk,sinhala.lankainformation.lk,,ok, +Minister of Science and Technology,National Engineering Research And Development Centre,nerdc.lk,nirdc.gov.lk,,ok, +Minister of Science and Technology,National Innovation Agency,nia.gov.lk,parliament.lk,,ok, +Minister of Science and Technology,National Institute of Fundamental Studies,nifs.ac.lk,,,ok, +Minister of Science and Technology,National Research Council of Sri Lanka,nrc.gov.lk,plusinfo.lk,,ok, +Minister of Science and Technology,National Science Foundation,nsf.gov.lk,nsf.ac.lk,applications.lk,ok, +Minister of Science and Technology,National Science and Technology Commission,gazette.lk,most.gov.lk,nastec.gov.lk,ok, +Minister of Science and Technology,Planetarium of Sri Lanka,srilankayo.lk,sinhala.lankainformation.lk,,ok, +Minister of Science and Technology,Sri Lanka Atomic Energy Board,aeb.gov.lk,aeb.webs.lk,aerc.gov.lk,ok, +Minister of Science and Technology,Sri Lanka Atomic Energy Regulatory Council,aerc.gov.lk,srilankalaw.lk,aeb.gov.lk,ok, +Minister of Science and Technology,Sri Lanka Institute of Biotechnology (Pvt.) Ltd.,slibtec.gov.lk,myturn.edu.lk,lmd.lk,ok, +Minister of Science and Technology,Sri Lanka Institute of Nanotechnology (Pvt.) Ltd.,slintec.lk,,,ok, +Minister of Science and Technology,Sri Lanka Inventors Fund,slic.gov.lk,auditorgeneral.gov.lk,dailymirror.lk,ok, +Minister of Science and Technology,Sri Lanka Inventors' Commission,slic.gov.lk,,,ok, +Minister of Science and Technology,Sri Lanka Standards Institute,slsi.lk,mode.gov.lk,sinhala.lankainformation.lk,ok, +Minister of Science and Technology,Vidatha Centres,most.gov.lk,,,ok, +"Minister of Trade, Commerce, Food Security and Cooperative Development",Consumer Affairs Authority,caa.gov.lk,consumeraffairs.gov.lk,sinhala.lankainformation.lk,ok, +"Minister of Trade, Commerce, Food Security and Cooperative Development",Cooperative Employees Commission,cec.gov.lk,cp.gov.lk,cec.sp.gov.lk,ok, +"Minister of Trade, Commerce, Food Security and Cooperative Development",Cooperative Wholesale Establishment,srilankalaw.lk,lankainformation.lk,,ok, +"Minister of Trade, Commerce, Food Security and Cooperative Development",Department of Commerce,doc.gov.lk,trade.gov.lk,drc.gov.lk,ok, +"Minister of Trade, Commerce, Food Security and Cooperative Development",Department of Cooperative Development (Registrar of Cooperative Societies),coop.gov.lk,lankainformation.lk,,ok, +"Minister of Trade, Commerce, Food Security and Cooperative Development","Department of Measurement Units, Standards and Services",measurementsdept.gov.lk,lankainformation.lk,,ok, +"Minister of Trade, Commerce, Food Security and Cooperative Development",Department of the Registrar of Companies,drc.gov.lk,doc.gov.lk,sinhala.lankainformation.lk,ok, +"Minister of Trade, Commerce, Food Security and Cooperative Development",Food Commissioner's Department,phonebook.lk,eohfs.health.gov.lk,staging.gic.gov.lk,ok, +"Minister of Trade, Commerce, Food Security and Cooperative Development",Lanka Sathosa Ltd.,treasury.gov.lk,soe.lk,lankasathosa.lk,ok, +"Minister of Trade, Commerce, Food Security and Cooperative Development",Mahapola Trust Fund,sjp.ac.lk,welfare.jfn.ac.lk,profession.lk,ok, +"Minister of Trade, Commerce, Food Security and Cooperative Development",National Institute of Cooperative Development,nicd.edu.lk,coop.gov.lk,lankainformation.lk,ok, +"Minister of Trade, Commerce, Food Security and Cooperative Development",National Intellectual Property Office of Sri Lanka,nipo.gov.lk,lankainformation.lk,phonebook.lk,ok, +"Minister of Trade, Commerce, Food Security and Cooperative Development",Regional Economic Centres,ips.lk,,,ok, +"Minister of Trade, Commerce, Food Security and Cooperative Development",Sri Lanka Accreditation Board for Conformity Assessment,slab.lk,most.gov.lk,,ok, +"Minister of Trade, Commerce, Food Security and Cooperative Development",Sri Lanka State Trading (General) Corporation Ltd,stc.lk,treasury.gov.lk,,ok, +"Minister of Trade, Commerce, Food Security and Cooperative Development",Sri Lanka Thriposha Co. Ltd.,thriposha.lk,newswire.lk,auditorgeneral.gov.lk,ok, +"Minister of Trade, Commerce, Food Security and Cooperative Development",State Trading Co-operative Wholesale Co. Ltd,stc.lk,rainbowpages.lk,soe.lk,ok, +"Minister of Transport, Highways and Urban Development",Condominium Management Authority (Common Amenities Board),condominium.lk,srilankalaw.lk,,ok, +"Minister of Transport, Highways and Urban Development",Department of Motor Traffic,dmt.gov.lk,eservices.motortraffic.gov.lk,dmtappointments.dmt.gov.lk,ok, +"Minister of Transport, Highways and Urban Development",Department of Sri Lanka Railways,railway.gov.lk,transport.gov.lk,sinhala.lankainformation.lk,ok, +"Minister of Transport, Highways and Urban Development",Lakdiva Engineering (Pvt) Ltd,transport.gov.lk,parliament.lk,lankainformation.lk,ok, +"Minister of Transport, Highways and Urban Development",Maga Neguma,adaderana.lk,skillsinternational.lk,sundaytimes.lk,ok, +"Minister of Transport, Highways and Urban Development",National Council for Road Safety,roadsafety.gov.lk,transport.gov.lk,,ok, +"Minister of Transport, Highways and Urban Development",National Physical Planning Department,nsdi.gov.lk,nppd.gov.lk,npd.treasury.gov.lk,ok, +"Minister of Transport, Highways and Urban Development",National Transport Commission,transport.gov.lk,entc.gov.lk,ntc.gov.lk,ok, +"Minister of Transport, Highways and Urban Development",National Transport Medical Institute,ntmi.lk,transport.gov.lk,,ok, +"Minister of Transport, Highways and Urban Development",Road Development Authority and its subsidiaries and affiliates,rda.gov.lk,rdahiniduma.lk,nsdi.gov.lk,ok, +"Minister of Transport, Highways and Urban Development",Sahasya Investment Ltd.,english.newsfirst.lk,newswire.lk,ft.lk,ok, +"Minister of Transport, Highways and Urban Development",Selendiva Investments Limited,counterpoint.lk,dailymirror.lk,themorning.lk,ok, +"Minister of Transport, Highways and Urban Development",Sri Lanka Land Development Corporation and its subsidiaries and related institutions,cida.gov.lk,auditorgeneral.gov.lk,job.govdoc.lk,ok, +"Minister of Transport, Highways and Urban Development",Sri Lanka Transport Board,sltb.lk,transport.gov.lk,sltb.eseat.lk,ok, +"Minister of Transport, Highways and Urban Development",State Development and Construction Corporation,soe.lk,sdcc.lk,treasury.gov.lk,ok, +"Minister of Transport, Highways and Urban Development",Urban Development Authority,uda.gov.lk,nsdi.gov.lk,motherlanka.uda.lk,ok, +"Minister of Transport, Highways and Urban Development",Urban Settlement Development Authority,usda.gov.lk,uda.gov.lk,nsdi.gov.lk,ok, +Minister of Women and Child Affairs,Department of Probation and Childcare Services,childwomenmin.gov.lk,probation.gov.lk,cp.gov.lk,ok, +Minister of Women and Child Affairs,National Child Protection Authority,childprotection.gov.lk,childwomenmin.gov.lk,sinhala.lankainformation.lk,ok, +Minister of Women and Child Affairs,National Committee on Women,childwomenmin.gov.lk,adaderana.lk,sundaytimes.lk,ok, +Minister of Women and Child Affairs,National Secretariat for Early Childhood Development,childwomenmin.gov.lk,eccd.lk,,ok, +Minister of Women and Child Affairs,Protection of Children-National Trust Fund,auditorgeneral.gov.lk,childprotection.gov.lk,protectionofchildren-nationaltrustfund.gov.lk,ok, +Minister of Women and Child Affairs,Sri Lanka Women's Bureau,childwomenmin.gov.lk,lankawomenemarket.gov.lk,police.lk,ok, +Minister of Youth Affairs and Sports,Department of Sports Development,mms.dosd.gov.lk,moys.gov.lk,cp.gov.lk,ok, +Minister of Youth Affairs and Sports,Institute of Sports Medicine,moys.gov.lk,health.gov.lk,doc.lk,ok, +Minister of Youth Affairs and Sports,National Centre for Leadership Development,ncld.gov.lk,,,ok, +Minister of Youth Affairs and Sports,National Institute of Sports Science,plusinfo.lk,coursenet.lk,ss.kln.ac.lk,ok, +Minister of Youth Affairs and Sports,National Sports Council,slsports.lk,moys.gov.lk,,ok, +Minister of Youth Affairs and Sports,National Youth Corps,youthcorps.lk,nysc.lk,studyway.lk,ok, +Minister of Youth Affairs and Sports,National Youth Services Council,nysc.lk,coursenet.lk,gazette.lk,ok, +Minister of Youth Affairs and Sports,National Youths Services Cooperative Society Limited,nysc.lk,sche.edu.lk,,ok, +Minister of Youth Affairs and Sports,Sri Lanka Anti-doping Agency,slada.lk,parliament.lk,soe.lk,ok, +Minister of Youth Affairs and Sports,Sugathadasa National Sports Complex Authority,srilankalaw.lk,snsca.gov.lk,,ok, From b625ad76257740880f30d5b284f6ffc5db6b9532 Mon Sep 17 00:00:00 2001 From: zaeema-n Date: Wed, 24 Jun 2026 14:51:24 +0530 Subject: [PATCH 08/12] Update readme --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index d3af53a..0a37be9 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ This writes `data/mins_depts_test_scored.csv` by default (same name as input wit Specify an output file: ```bash -websitescorecard scan data/mins_depts_test.csv -c URL -o data/mins_depts_scored.csv --checks ssl +websitescorecard scan data/mins_depts_test.csv -c URL -o output/mins_depts_scored.csv --checks ssl ``` ### 4. Check the output @@ -88,10 +88,10 @@ Typical two-step workflow: ```bash # 1. Resolve names → domains (gov.lk and .gov only, keep up to 3 per row) websitescorecard resolve data/bodies.csv -c "Institution Name" \ - --suffixes gov.lk,lk --limit 3 -o data/bodies_with_urls.csv + --suffixes gov.lk,lk --limit 3 -o output/bodies_with_urls.csv # 2. Scan the first URL column -websitescorecard scan data/bodies_with_urls.csv -c URL --checks ssl +websitescorecard scan output/bodies_with_urls.csv -c URL --checks ssl ``` `resolve` searches DuckDuckGo for `"{name} {query_suffix}"` (default query suffix: `Sri Lanka`), extracts hostnames from results, optionally filters by hostname suffix, and writes an enriched CSV. All original columns are preserved. @@ -165,7 +165,7 @@ Examples: ```bash # Resolve with suffix filter and multiple URLs per row websitescorecard resolve data/bodies.csv -c "Institution Name" \ - --suffixes gov.lk,lk --limit 3 -o data/bodies_with_urls.csv + --suffixes gov.lk,lk --limit 3 -o output/bodies_with_urls.csv # View all options websitescorecard resolve --help From 728307b50e7a79083cae4ef731302396cc9e04e5 Mon Sep 17 00:00:00 2001 From: zaeema-n Date: Thu, 25 Jun 2026 10:28:50 +0530 Subject: [PATCH 09/12] Remove unnecessary prints --- src/websitescorecard/resolve/domain_search.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/websitescorecard/resolve/domain_search.py b/src/websitescorecard/resolve/domain_search.py index cae29b2..7b4f33f 100644 --- a/src/websitescorecard/resolve/domain_search.py +++ b/src/websitescorecard/resolve/domain_search.py @@ -99,15 +99,5 @@ def search_domains( with DDGS(**ddgs_kwargs) as ddgs: results = list(ddgs.text(query, max_results=max_results)) - print(f"[ddgs] query: {query!r} (max_results={max_results})") - if results: - for i, result in enumerate(results, 1): - href = result.get("href") or result.get("url") or "" - title = result.get("title") or "" - print(f"[ddgs] {i}. {href} | {title}") - else: - print("[ddgs] (no results)") - print() - hostnames = hostnames_from_results(results, suffixes=suffixes) return hostnames[:limit] From 3f23ed8908868cbd6f729c0266e47d39f36cde8e Mon Sep 17 00:00:00 2001 From: zaeema-n Date: Thu, 25 Jun 2026 12:03:10 +0530 Subject: [PATCH 10/12] Refactor domain suffix matching logic to improve readability and maintainability --- src/websitescorecard/resolve/domain_search.py | 24 ++++++++++++------- .../resolve/resolve_runner.py | 11 +++++---- tests/test_domain_search.py | 7 ++++-- 3 files changed, 27 insertions(+), 15 deletions(-) diff --git a/src/websitescorecard/resolve/domain_search.py b/src/websitescorecard/resolve/domain_search.py index 7b4f33f..bf8d568 100644 --- a/src/websitescorecard/resolve/domain_search.py +++ b/src/websitescorecard/resolve/domain_search.py @@ -28,20 +28,24 @@ def normalize_suffixes(suffixes: Sequence[str] | None) -> list[str] | None: return sorted(set(normalized), key=len, reverse=True) +def _hostname_matches_suffixes(host: str, normalized: list[str]) -> bool: + for suffix in normalized: + if host == suffix or host.endswith("." + suffix): + return True + return False + + def matches_suffix(hostname: str, suffixes: Sequence[str] | None) -> bool: """Return True if hostname matches any allowed suffix.""" if not suffixes: return True - host = hostname.lower().rstrip(".") normalized = normalize_suffixes(suffixes) if not normalized: return True - for suffix in normalized: - if host == suffix or host.endswith("." + suffix): - return True - return False + host = hostname.lower().rstrip(".") + return _hostname_matches_suffixes(host, normalized) def extract_hostname(url: str) -> str | None: @@ -60,7 +64,7 @@ def extract_hostname(url: str) -> str | None: def hostnames_from_results( results: Iterable[dict[str, str]], *, - suffixes: Sequence[str] | None = None, + normalized_suffixes: list[str] | None = None, ) -> list[str]: """Extract unique hostnames from search results, optionally filtered by suffix.""" seen: set[str] = set() @@ -71,7 +75,9 @@ def hostnames_from_results( hostname = extract_hostname(href) if not hostname or hostname in seen: continue - if not matches_suffix(hostname, suffixes): + if normalized_suffixes is not None and not _hostname_matches_suffixes( + hostname, normalized_suffixes + ): continue seen.add(hostname) hostnames.append(hostname) @@ -83,7 +89,7 @@ def search_domains( query: str, *, limit: int = 1, - suffixes: Sequence[str] | None = None, + normalized_suffixes: list[str] | None = None, oversample_factor: int = OVERSAMPLE_FACTOR, timeout: int | None = None, ) -> list[str]: @@ -99,5 +105,5 @@ def search_domains( with DDGS(**ddgs_kwargs) as ddgs: results = list(ddgs.text(query, max_results=max_results)) - hostnames = hostnames_from_results(results, suffixes=suffixes) + hostnames = hostnames_from_results(results, normalized_suffixes=normalized_suffixes) return hostnames[:limit] diff --git a/src/websitescorecard/resolve/resolve_runner.py b/src/websitescorecard/resolve/resolve_runner.py index aa294b8..4b676eb 100644 --- a/src/websitescorecard/resolve/resolve_runner.py +++ b/src/websitescorecard/resolve/resolve_runner.py @@ -10,7 +10,7 @@ from rich.progress import BarColumn, Progress, TaskProgressColumn, TextColumn, TimeElapsedColumn from websitescorecard.csv_io import read_csv, write_csv -from websitescorecard.resolve.domain_search import search_domains +from websitescorecard.resolve.domain_search import normalize_suffixes, search_domains LOOKUP_STATUS_COL = "lookup_status" LOOKUP_ERROR_COL = "lookup_error" @@ -67,7 +67,7 @@ def _resolve_row( *, name_column: str, url_columns: list[str], - suffixes: list[str] | None, + normalized_suffixes: list[str] | None, query_suffix: str, limit: int, delay: float, @@ -90,7 +90,7 @@ def _resolve_row( domains = search_domains( query, limit=limit, - suffixes=suffixes, + normalized_suffixes=normalized_suffixes, timeout=timeout, ) if domains: @@ -123,6 +123,9 @@ def run_resolve(config: ResolveConfig) -> None: url_cols = _url_columns(config.url_column, config.limit) output_columns = _output_columns(original_columns, url_cols) enriched_rows: list[dict[str, str] | None] = [None] * len(rows) + normalized_suffixes = ( + normalize_suffixes(config.suffixes) if config.suffixes else None + ) with Progress( TextColumn("[progress.description]{task.description}"), @@ -141,7 +144,7 @@ def run_resolve(config: ResolveConfig) -> None: row, name_column=config.name_column, url_columns=url_cols, - suffixes=config.suffixes, + normalized_suffixes=normalized_suffixes, query_suffix=config.query_suffix, limit=config.limit, delay=config.delay, diff --git a/tests/test_domain_search.py b/tests/test_domain_search.py index 9cdb11d..b21abb9 100644 --- a/tests/test_domain_search.py +++ b/tests/test_domain_search.py @@ -67,7 +67,10 @@ def test_hostnames_from_results_dedupes_and_filters(): {"href": "https://news.site.com/story"}, ] - assert hostnames_from_results(results, suffixes=["gov.lk", "gov"]) == [ + assert hostnames_from_results( + results, + normalized_suffixes=normalize_suffixes(["gov.lk", "gov"]), + ) == [ "treasury.gov.lk", "defence.gov.lk", ] @@ -88,7 +91,7 @@ def test_search_domains_filters_and_limits(mock_ddgs_cls): domains = search_domains( "Ministry of Finance Sri Lanka", limit=2, - suffixes=["gov.lk"], + normalized_suffixes=normalize_suffixes(["gov.lk"]), oversample_factor=2, ) From cb5de042e9ba0e1ef9bd624b8890ae1bcebecf33 Mon Sep 17 00:00:00 2001 From: zaeema-n Date: Thu, 25 Jun 2026 13:40:02 +0530 Subject: [PATCH 11/12] Refactor enriched rows handling in scan and resolve functions to use a dictionary for improved indexing and clarity --- src/websitescorecard/resolve/resolve_runner.py | 7 ++++--- src/websitescorecard/runner.py | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/websitescorecard/resolve/resolve_runner.py b/src/websitescorecard/resolve/resolve_runner.py index 4b676eb..edb6a94 100644 --- a/src/websitescorecard/resolve/resolve_runner.py +++ b/src/websitescorecard/resolve/resolve_runner.py @@ -122,7 +122,7 @@ def run_resolve(config: ResolveConfig) -> None: url_cols = _url_columns(config.url_column, config.limit) output_columns = _output_columns(original_columns, url_cols) - enriched_rows: list[dict[str, str] | None] = [None] * len(rows) + enriched_rows_map: dict[int, dict[str, str]] = {} normalized_suffixes = ( normalize_suffixes(config.suffixes) if config.suffixes else None ) @@ -154,7 +154,8 @@ def run_resolve(config: ResolveConfig) -> None: } for future in as_completed(futures): index, enriched = future.result() - enriched_rows[index] = enriched + enriched_rows_map[index] = enriched progress.advance(task) - write_csv(config.output_path, output_columns, enriched_rows) # type: ignore[arg-type] + enriched_rows = [enriched_rows_map[i] for i in range(len(rows))] + write_csv(config.output_path, output_columns, enriched_rows) diff --git a/src/websitescorecard/runner.py b/src/websitescorecard/runner.py index bc269a1..3c07693 100644 --- a/src/websitescorecard/runner.py +++ b/src/websitescorecard/runner.py @@ -65,7 +65,7 @@ def run_scan(config: ScanConfig) -> None: output_columns = _output_columns( original_columns, config.checks, config.include_error_columns ) - enriched_rows: list[dict[str, str] | None] = [None] * len(rows) + enriched_rows_map: dict[int, dict[str, str]] = {} with Progress( TextColumn("[progress.description]{task.description}"), @@ -83,7 +83,8 @@ def run_scan(config: ScanConfig) -> None: } for future in as_completed(futures): index, enriched = future.result() - enriched_rows[index] = enriched + enriched_rows_map[index] = enriched progress.advance(task) - write_csv(config.output_path, output_columns, enriched_rows) # type: ignore[arg-type] + enriched_rows = [enriched_rows_map[i] for i in range(len(rows))] + write_csv(config.output_path, output_columns, enriched_rows) From 0a8023047abe5ee9c27ecb484bfd589f8924e2e6 Mon Sep 17 00:00:00 2001 From: zaeema-n Date: Thu, 25 Jun 2026 13:42:36 +0530 Subject: [PATCH 12/12] Refactor timeout parameter type from int to float --- src/websitescorecard/cli.py | 3 +-- src/websitescorecard/resolve/domain_search.py | 4 ++-- src/websitescorecard/resolve/resolve_runner.py | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/websitescorecard/cli.py b/src/websitescorecard/cli.py index fba02f1..d97a699 100644 --- a/src/websitescorecard/cli.py +++ b/src/websitescorecard/cli.py @@ -152,7 +152,6 @@ def resolve( raise typer.Exit(code=1) output_path = output or _default_resolve_output_path(input_csv) - timeout_seconds = int(timeout) if timeout is not None else None config = ResolveConfig( input_path=input_csv, @@ -164,7 +163,7 @@ def resolve( query_suffix=query_suffix, concurrency=concurrency, delay=delay, - timeout=timeout_seconds, + timeout=timeout, ) try: diff --git a/src/websitescorecard/resolve/domain_search.py b/src/websitescorecard/resolve/domain_search.py index bf8d568..73e94e1 100644 --- a/src/websitescorecard/resolve/domain_search.py +++ b/src/websitescorecard/resolve/domain_search.py @@ -91,14 +91,14 @@ def search_domains( limit: int = 1, normalized_suffixes: list[str] | None = None, oversample_factor: int = OVERSAMPLE_FACTOR, - timeout: int | None = None, + timeout: float | None = None, ) -> list[str]: """Search for domains matching a query, filtered by optional hostname suffixes.""" if limit < 1: return [] max_results = max(limit * oversample_factor, limit) - ddgs_kwargs: dict[str, int] = {} + ddgs_kwargs: dict[str, float] = {} if timeout is not None: ddgs_kwargs["timeout"] = timeout diff --git a/src/websitescorecard/resolve/resolve_runner.py b/src/websitescorecard/resolve/resolve_runner.py index edb6a94..5c445ee 100644 --- a/src/websitescorecard/resolve/resolve_runner.py +++ b/src/websitescorecard/resolve/resolve_runner.py @@ -27,7 +27,7 @@ class ResolveConfig: query_suffix: str = "Sri Lanka" concurrency: int = 1 delay: float = 1.0 - timeout: int | None = None + timeout: float | None = None def _url_columns(url_column: str, limit: int) -> list[str]: @@ -71,7 +71,7 @@ def _resolve_row( query_suffix: str, limit: int, delay: float, - timeout: int | None, + timeout: float | None, ) -> tuple[int, dict[str, str]]: if _has_existing_url(row, url_columns[0]): return index, _ensure_resolve_columns(row, url_columns)