Health Canada Drug Database Scraper
Pricing
Pay per event
Health Canada Drug Database Scraper
Extract official Health Canada DPD records: DINs, statuses, ingredients, routes, schedules, company names, ATC classes, and product URLs.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Share
Extract official Canadian Drug Product Database (DPD) records from Health Canada's public JSON API. The actor returns product rows with DINs, brands, company names, statuses, active ingredients, dosage forms, routes, schedules, therapeutic classes, and official product URLs.
Use it when you need repeatable Canada-specific drug master data without building and maintaining your own DPD API joining pipeline.
What does Health Canada Drug Database Scraper do?
Health Canada Drug Database Scraper downloads structured records from the public Health Canada Drug Product Database API.
It starts with the official drugproduct endpoint and can join related DPD endpoints by drug_code.
The output is one normalized dataset row per drug product.
Each row includes identifiers, regulatory status, ingredient data, dosage form data, route data, schedule data, and provenance.
Who is it for?
🧪 Regulatory affairs teams use it to monitor Canadian marketed, approved, dormant, or cancelled products.
💊 Pharma data teams use it to enrich internal drug master-data tables with DIN and DPD attributes.
🏥 Healthcare analytics teams use it to build formularies, product catalogs, and Canada-specific drug reference datasets.
🔁 Compliance operators use it for recurring checks instead of one-off manual CSV exports.
Why use this actor?
The official source is public, structured, and maintained by Health Canada.
The actor saves you from writing endpoint loaders, retry logic, field normalization, and drug_code joins.
You can run a tiny brand/DIN lookup or a larger recurring monitoring job with the same input schema.
Data source
The actor uses Health Canada's public API under:
https://health-products.canada.ca/api/drug/
It does not require a login, API key, browser automation, or proxy.
What data can you extract?
| Field | Description |
|---|---|
drugCode | Health Canada DPD drug code |
drugIdentificationNumber | DIN, preserving leading zeros |
brandName | Product brand name |
companyName | Company associated with the product |
currentStatus | Joined product status |
activeIngredients | Ingredient names, strengths, and dosage units |
forms | Pharmaceutical forms |
routes | Routes of administration |
schedules | Prescription / schedule data |
therapeuticClasses | ATC number and class when available |
officialProductUrl | Health Canada product detail URL |
How much does it cost to scrape the Health Canada Drug Database?
The actor uses pay-per-event pricing.
There is a $0.005 start charge per run and a tiered per-item charge for each drug product saved.
Current BRONZE per-item price is $0.00002929 per DPD product row, with lower prices on higher Apify tiers.
Use filters and a reasonable maxItems value for low-cost targeted runs.
Input options
language: choose English or French source data.maxItems: cap the number of drug products saved.includeRelatedData: join related DPD endpoints into each product row.drugCodes: extract exact DPD drug codes.dins: extract exact DINs.brandNames: match brand-name substrings.companyNames: match company-name substrings.statuses: match statuses such asMarketed.activeIngredientNames: match active ingredient substrings.
Example input: marketed Advil products
{"language": "en","maxItems": 50,"brandNames": ["ADVIL"],"statuses": ["Marketed"],"includeRelatedData": true}
Example input: active ingredient monitoring
{"language": "en","maxItems": 200,"activeIngredientNames": ["IBUPROFEN"],"includeRelatedData": true}
Example output
{"drugCode": 12345,"drugIdentificationNumber": "00000000","brandName": "EXAMPLE BRAND","companyName": "EXAMPLE COMPANY","currentStatus": "Marketed","activeIngredients": [{ "name": "IBUPROFEN", "strength": "200", "strengthUnit": "MG", "dosageValue": null, "dosageUnit": null }],"forms": ["Tablet"],"routes": ["Oral"],"schedules": ["PRESCRIPTION"],"officialProductUrl": "https://health-products.canada.ca/dpd-bdpp/info?lang=en&code=12345","language": "en"}
How to run it
- Open the actor on Apify.
- Choose your language and filters.
- Keep
includeRelatedDataenabled when you need enriched product rows. - Set
maxItemsto your desired limit. - Run the actor and export the dataset as JSON, CSV, Excel, or via API.
Tips for better results
Use DIN filters for exact product lookups.
Use brand-name filters for product families.
Use status filters for monitoring only marketed or only cancelled products.
Use active ingredient filters for recurring ingredient-level surveillance.
Disable related data only when you need a faster raw product list.
Integrations
Send the dataset to Google Sheets for regulatory review queues.
Load JSON output into BigQuery, Snowflake, or Postgres for drug master-data enrichment.
Use Apify webhooks to trigger Slack, email, or downstream ETL jobs after each monitoring run.
Connect this actor with internal formularies or product-catalog workflows.
API usage with Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/health-canada-drug-database-scraper').call({language: 'en',maxItems: 100,statuses: ['Marketed'],includeRelatedData: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0]);
API usage with Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')run = client.actor('automation-lab/health-canada-drug-database-scraper').call(run_input={'language': 'en','maxItems': 100,'statuses': ['Marketed'],'includeRelatedData': True,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items[0])
API usage with cURL
curl "https://api.apify.com/v2/acts/automation-lab~health-canada-drug-database-scraper/runs?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"language":"en","maxItems":100,"statuses":["Marketed"],"includeRelatedData":true}'
MCP for Claude and other clients
Use Apify MCP to run the actor from Claude Desktop, Claude Code, or other MCP clients.
MCP URL:
https://mcp.apify.com/?tools=automation-lab/health-canada-drug-database-scraper
Claude Code setup:
$claude mcp add apify-health-canada-drugs "https://mcp.apify.com/?tools=automation-lab/health-canada-drug-database-scraper"
Claude Desktop JSON configuration:
{"mcpServers": {"apify-health-canada-drugs": {"url": "https://mcp.apify.com/?tools=automation-lab/health-canada-drug-database-scraper"}}}
Example prompts:
- "Run the Health Canada Drug Database scraper for marketed ibuprofen products and summarize the output."
- "Extract DIN records for this brand and compare the current statuses."
- "Create a weekly monitoring workflow for dormant Canadian drug products."
Data freshness
The actor fetches data live from the Health Canada API during each run.
Freshness depends on Health Canada's upstream DPD update cadence.
The output includes lastUpdateDate from the source and scrapedAt from the actor run.
Limitations
The actor returns data available in the public DPD API.
It does not infer medical advice, clinical equivalence, pricing, patents, recalls, or availability outside the DPD fields.
Very broad runs can return many products, so use maxItems deliberately.
Legality
This actor uses a public government data API and does not bypass login walls or collect personal data.
You are responsible for using the data according to Health Canada's terms and your local compliance requirements.
The dataset should not be treated as medical advice.
Troubleshooting
If you get fewer records than expected, check whether your filters are too narrow.
If a DIN search returns nothing, preserve leading zeros and pass DINs as strings.
If related arrays are empty, confirm includeRelatedData is set to true.
FAQ
Can I scrape all DPD products?
Yes. Set a high maxItems and leave filters empty. For cost control, start with a smaller test run first.
Does it support French?
Yes. Set language to fr to request French API responses and product URLs.
Does it need a proxy?
No. The actor uses the official public JSON API over normal HTTP requests.
Can I monitor only marketed products?
Yes. Set statuses to ["Marketed"].
Related scrapers
You may also need other automation-lab healthcare or regulatory actors when available:
https://apify.com/automation-lab/openfda-scraperhttps://apify.com/automation-lab/clinical-trials-fda-scraperhttps://apify.com/automation-lab/fda-device-recalls
Support
If you need a field from another Health Canada endpoint, open an Apify issue with the endpoint name and an example product.
Changelog
Initial version extracts Health Canada DPD products and joins related public API endpoints by drug_code.