CoolFace
Datasetpublic

swadhinbiswas/bangladeshi-jobs

Bangladeshi Tech Jobs β€” Open Dataset Weekly-refreshed, structured dataset of open software & IT job postings from Bangladeshi tech companies, built by an automated crawl β†’ LLM-extraction β†’ data-warehouse pipeline. Published as JSON + Parquet + a DuckDB star schema, free for any use with attribution (CC-BY-4.0). Snapshot (2026-09-27) πŸ€– Auto-generated on every build β€” these numbers are never edited by hand. Metric Value Registered companies 234… See the full description on the dataset page: https://huggingface.co/datasets/swadhinbiswas/bangladeshi-jobs.

sourceHugging Facecc-by-4.0updated 16h agoView on Hugging Face
0likes288downloads
Dataset Card

Bangladeshi Tech Jobs β€” Open Dataset

Weekly-refreshed, structured dataset of open software & IT job postings from Bangladeshi tech companies, built by an automated crawl β†’ LLM-extraction β†’ data-warehouse pipeline. Published as JSON + Parquet + a DuckDB star schema, free for any use with attribution (CC-BY-4.0).

<!-- SNAPSHOT:START -->

Snapshot (2026-09-27)

πŸ€– Auto-generated on every build β€” these numbers are never edited by hand.
MetricValue
Registered companies234
Companies with verified career page147
Hiring right now65
Open postings483
Total postings tracked483
Distinct skills demanded518
Remote-friendly postings11
Median max salary (explicit figures)ΰ§³60,000 / month
Most active hirerNext Ventures
Most in-demand skillPython

<!-- SNAPSHOT:END -->

Files

gold/                      ← recommended entry points (JSON + Parquet, stable schema)
  recent_jobs.*            1 row = 1 posting (open, newest first, max 150)
  companies.*              1 row = 1 company (tech stack, career URL, open jobs)
  tech_demand.*            1 row = tag β†’ jobs, companies (skill demand)
  jobs_per_company.*       1 row = company β†’ hiring velocity
  location_heatmap.*       1 row = location β†’ jobs
  salary_stats.*           1 row = currency β†’ median/min/max salary, n
  employment_breakdown.*   FullTime / Contract / Internship …
  company_tech.*           1 row = technology β†’ company count
  stats.json               headline KPIs (single row)
parquet/                   ← normalized tables
  fact_job.parquet         1 row = 1 posting (full detail)
  dim_company.parquet      company registry
  bridge_job_tag.parquet   posting ↔ tag junction
  job_snapshot.parquet     SCD-style history (first_seen / last_seen)
warehouse.duckdb           ← full DuckDB star schema, queryable in place
raw/job-posts.json         ← crawler output (source of truth)

fact_job schema (main table)

ColumnTypeNotes
job_idTEXT PKsha256(company\title\source) β€” stable across runs
company_nameTEXTmatched against the curated company registry
title, description_mdTEXTcleaned Markdown description
employment_typeTEXTFullTime / PartTime / Contract / Internship / Freelance / Temporary
location_text, location_typeTEXTRemote / Hybrid / OnSite
salary_min/max/currencyINT/TEXTexplicit figures only, min ≀ max enforced
deadline_date, is_open, is_expiredDATE/BOOLis_open = deadline β‰₯ today or unknown
tagsTEXT[]canonical tech names (React, NodeJS, PostgreSQL…)
apply_links[], source_urlTEXT[]provenance back to the original posting
first_seen_at, last_seen_atTIMESTAMPfreshness tracking

Pipeline

career pages (curated registry of BD software companies)
  β†’ crawler: ATS JSON APIs β†’ schema.org JSON-LD β†’ markdown + pagination
  β†’ LLM extraction (batched, schema-constrained)
  β†’ LLM refinement pass (id-aligned cleaning batches)
  β†’ deterministic enhancer (dedup, confidence β‰₯ 0.5 gate, salary sanity)
  β†’ DuckDB warehouse (idempotent upserts on job_id)
  β†’ gold views β†’ this bucket   (refreshed weekly)

Every posting keeps its source_url. Jobs are sourced from company career pages and the BDJobs board (registered employers only β€” unrelated board posters are excluded).

Quality guarantees

  • β€”Dedup: within a company, same (title, location) keeps the highest-confidence row.
  • β€”Confidence gate: rows below 0.5 are dropped before publication.
  • β€”Salary sanity: explicit numbers only; min ≀ max; currency normalized.
  • β€”Freshness: expired deadlines filtered from all "open" views; last_seen_at per row.
  • β€”Idempotent rebuilds: same input β†’ same job_ids; weekly runs never duplicate.

Quickstart

bash
# headline numbers
curl -L https://huggingface.co/datasets/swadhinbiswas/bangladeshi-jobs/resolve/main/gold/stats.json
python
import pandas as pd
df = pd.read_json("https://huggingface.co/datasets/swadhinbiswas/bangladeshi-jobs/resolve/main/gold/recent_jobs.json")
print(df.groupby("company_name").size().sort_values(ascending=False).head())
sql
-- DuckDB: query Parquet in place, no download
SELECT company_name, title, salary_min, salary_max
FROM read_json_auto(
  'https://huggingface.co/datasets/swadhinbiswas/bangladeshi-jobs/resolve/main/gold/recent_jobs.json')
WHERE list_contains(tags, 'React')
ORDER BY salary_max DESC NULLS LAST;

Limitations

  • β€”Descriptions and structured fields are LLM-extracted; rare extraction noise is possible (mitigated by the refinement pass + confidence gate).
  • β€”Salaries are present only where explicitly stated (~minority of postings).
  • β€”Coverage tracks the curated registry; companies not yet registered won't appear even if hiring on job boards.

Citation

bibtex
@dataset{bangladeshi_tech_jobs_2026,
  title  = {Bangladeshi Tech Jobs β€” Open Dataset},
  author = {swadhinbiswas},
  year   = {2026},
  url    = {https://huggingface.co/datasets/swadhinbiswas/bangladeshi-jobs},
  note   = {Weekly-refreshed job postings from Bangladeshi software companies}
}

Licensed under CC-BY-4.0 β€” cite software-companies-in-bangladesh and link the repo.