Al-Dawaa APIal-dawaa.com ↗
Search Al-Dawaa Pharmacy's Saudi Arabia catalog. Get stock status, SAR pricing, prescription flags, and product details via 2 structured endpoints.
What is the Al-Dawaa API?
The Al-Dawaa Pharmacy API provides 2 endpoints for searching medications and retrieving product details from one of Saudi Arabia's largest pharmacy chains. The search_medication endpoint returns paginated results with availability status, price, and prescription requirements. The get_medication_details endpoint returns granular fields including stock level, stock status string, product categories, and delivery availability for a specific product code.
curl -X GET 'https://api.parse.bot/scraper/92c4c848-a0cc-4cdf-8f91-8e0dbd2cf735/search_medication?page=0&query=panadol&page_size=20' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace al-dawaa-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Al-Dawaa Pharmacy SDK — search medications and check details."""
from parse_apis.al_dawaa_com_api import AlDawaa, MedicationNotFound
client = AlDawaa()
# Search for a common medication; limit total items fetched.
for med in client.medication_summaries.search(query="panadol", limit=5):
print(med.name, med.price, med.currency, "Rx" if med.prescription_required else "OTC")
# Drill into the first result's full details via typed navigation.
hit = client.medication_summaries.search(query="aspirin", limit=1).first()
if hit is not None:
detail = hit.details()
print(detail.name, detail.brand, detail.stock_level, "in stock" if detail.in_stock else "out of stock")
for cat in detail.categories:
print(" ", cat.name)
# Direct point lookup by known product code.
try:
med = client.medications.get(code="102020")
print(med.name, med.price, med.currency)
except MedicationNotFound:
print("Product not found")
print("exercised: medication_summaries.search / MedicationSummary.details / medications.get")
Search for medications by name or keyword. Returns a paginated list of matching products with their availability status, price, and whether a prescription is required. Pagination is 0-indexed; omitting page returns the first page.
| Param | Type | Description |
|---|---|---|
| page | integer | 0-indexed page number for pagination. |
| queryrequired | string | Search term for medication name, brand, or keyword (e.g. 'panadol', 'aspirin'). |
| page_size | integer | Number of results per page (1-100). |
{
"type": "object",
"fields": {
"query": "The search term used",
"products": "Array of matching medication products with availability info",
"pagination": "Object with current_page, page_size, total_pages, total_results"
},
"sample": {
"data": {
"query": "panadol",
"products": [
{
"url": "/Medicine-and-Treatment/Self-Medication/Cough%2C-Cold-%26-Allergy/Panadol-Cold-And-Flu%2C-Night-Time%2C-For-Common-Cold---24-Caplets/p/101688",
"code": "101688",
"name": "Panadol Cold And Flu, Night Time, For Common Cold - 24 Caplets",
"brand": "Panadol",
"price": 12.3,
"currency": "SAR",
"in_stock": true,
"stock_status": "inStock",
"prescription_required": false
}
],
"pagination": {
"page_size": 20,
"total_pages": 1,
"current_page": 0,
"total_results": 19
}
},
"status": "success"
}
}About the Al-Dawaa API
Search Medications
The search_medication endpoint accepts a required query string — a medication name, brand, or keyword such as panadol or aspirin — and returns a paginated list of matching products. Pagination is 0-indexed via the page parameter, and page_size controls results per page (1–100). Each result in the products array includes availability info and prescription flags, making it straightforward to filter prescription-only items programmatically. The pagination object in the response exposes current_page, page_size, total_pages, and total_results.
Product Details
The get_medication_details endpoint takes a product_code obtained from search results. It returns the full product name including dosage and form, brand, SAR price, and currency code. The in_stock boolean gives a quick availability check, while stock_level provides a numeric quantity when available and stock_status returns either inStock or outOfStock. The categories array contains category objects with both code and name fields, useful for classification or filtering logic.
Coverage and Data Scope
All data is scoped to Al-Dawaa Pharmacy's Saudi Arabia inventory. Prices are denominated in SAR. The API does not require you to specify a specific store branch — it reflects general availability across the chain. Product codes are stable identifiers and can be stored and re-queried to monitor stock changes over time.
The Al-Dawaa API is a managed, monitored endpoint for al-dawaa.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when al-dawaa.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official al-dawaa.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Monitor stock status of specific medications by polling
get_medication_detailswith stored product codes - Build a prescription-drug filter by checking the prescription-required flag returned in
search_medicationresults - Track SAR price changes for a list of medications across Al-Dawaa's catalog
- Catalog Al-Dawaa's product taxonomy using the
categoriesarray fromget_medication_details - Identify out-of-stock medications before a patient visit by checking
stock_statusandin_stockfields - Build a medication lookup tool that maps brand names to dosage forms using the
nameandbrandfields
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Al-Dawaa have an official public developer API?+
What does `get_medication_details` return beyond basic price and availability?+
in_stock boolean, numeric stock_level when available, stock_status string (inStock or outOfStock), a categories array with code and name pairs, and a description field when the product has one.Does `search_medication` support filtering by category, price range, or prescription status?+
query, an optional page, and an optional page_size. Filtering by category, price range, or prescription status is not a built-in parameter — those fields are returned in results but filtering must be done client-side. You can fork this API on Parse and revise it to add server-side filter parameters.Can I look up which specific Al-Dawaa branch has a medication in stock?+
How should I paginate through a large set of search results?+
page parameter (0-indexed) alongside page_size (1–100). The pagination object in every response includes total_pages and total_results, so you can determine how many additional requests are needed without guessing.