Project case study
Charity Data Scraper
A full-stack scraper for public Canadian charity records with queue-based processing, live progress, retries, and MongoDB storage.
Case study
Resumable Canadian charity data pipeline
Problem
- Large public-record collection needed to tolerate long runtimes, retries, and interruptions.
- Parsing logic needed to evolve without forcing every source record to be fetched again.
Approach
- Use queue-backed processing with pause/resume controls, retry handling, and rate limiting.
- Persist raw source responses separately from processed records so transformation logic can be replayed.
System Shape
- Node.js and TypeScript coordinate collection, Redis-backed job state, MongoDB storage, and Docker-based local services.
- A React dashboard exposes live progress, queue visibility, search views, and controls for long-running sessions.
Current State
- The private application is implemented with resumable discovery, configurable workers, atomic offset tracking, retries, and source-aware rate controls.
- Only public Canadian charity records are in scope; collection settings are designed to respect source limits, and deployments remain responsible for applicable access terms.