Extract Algeria's FGCMPI registers: guaranteed housing projects with their guarantee dates, insurance policy numbers, locations and housing breakdown, and the affiliated real-estate developers with their agrément, TNPI, registered office and contact details.
Warn when a listing page carries no project card. A filter that matches
nothing and a page whose markup changed both produced an empty dataset with
exit code 0 and no explanation; the log now names the page and the cause.
Stop spending a second listing page when the row cap fits on page 1
(maxItems ≤ cards per page). The extra page absorbed cross-page duplicates
only when the cap actually spans pages.
0.1.1
Added
Offline Vitest suite covering the input validation, the listing/detail/
register parsers, the crawl engine and the Actor metadata.
Local and Apify smoke-test runners with a shared flow: projects with and
without details, a wilaya filter discovered from the first step, and the
affiliation register.
Schema validation against Apify's official schemas (npm run lint).
GitHub Actions CI: install, typecheck, schema validation, tests and build.
Fixture extraction from a HAR capture (scripts/extract-fixtures.mjs).
Fixed
Collapse every run of whitespace in parsed text, not only the first one.
Decode the HTML entities (', &, "…) printed in the
affiliation register's cells.
Read pagination links in both their &page= and ?page= forms.
0.1.0
Initial release.
Added
One register per run, selected by What to scrape (startMode):
projects for guaranteed housing projects, developers for the
affiliation register.
Project filters for promoter, title, wilaya and housing programme
(PL / LSP / LPA).
Optional full project records with guarantee dates, insurance policy
number, registered office, status, construction type and housing
breakdown.
Developer rows with affiliation, agrément and TNPI numbers, company
name, manager, registered office, phone and wilaya.
Run controls for row count, result pages, concurrency, rate limit and
retries, with a default cap of 200 rows per run.
Rows are pushed while the crawl runs, so results appear without waiting
for every listing page to finish.
Projects whose full record cannot be read keep their summary row;
detailStatus explains why.
Spreadsheet-safe text cells, so CSV and Excel exports treat values as
text rather than formulas.