Bulk exports
When you want a whole dataset in your warehouse rather than a page at a time, ask for an export. It runs in the background and hands you files.
curl -X POST https://api.darak.app/v1/exports \
-H "Authorization: Bearer $DARAK_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"dataset": "listings", "format": "ndjson", "filters": {"city": ["riyadh", "jeddah"]}}'
The answer is an export with status: "queued". Poll GET /exports/{export_id} every few seconds to a minute: it starts within about a minute, and a snapshot of every listing in the country takes a few minutes. Once status is completed, files has a signed link for each file, valid for an hour; ask again for fresh ones. Files are deleted 7 days after the export completes.
Datasets.
listings: every active listing matchingfilters, which are the /listings filters as JSON (cityandlisting_typetake several values and default to all of them). Addupdated_sincefor an incremental snapshot.listing_changes: everycreated,price_changedanddelistedevent betweenfilters.fromandfilters.to(up to 366 days), each with the listing as it is now. Every recorded price change is there, with the price before and after, so this is the dataset to load for history. Listing history begins on 2026-03-09.registered_transactions: the Ministry of Justice's registered sale deals, rows as GET /transactions serves them.registered_rents: REGA's rent index cells, as GET /market/registered-rents serves them.
Files. Data comes in parts of up to 25,000 rows (part-00001.ndjson.gz, part-00002.ndjson.gz, …), each of which stands alone, so load them in parallel. An NDJSON row is exactly the object the matching endpoint returns in data; CSV flattens it into dotted columns (price.yearly_sar, location.neighborhood_id) with arrays as JSON. manifest.json lists the parts with their row counts, the columns, the filters, the licence and any caveats about the data. CSV is UTF-8 without a byte-order mark.
Cost and limits. The listing datasets need the Pro plan or up (the exports scope). They are counted before anything is written and charged 10 units per 1,000 rows, once, against your monthly quota but not your per-minute rate; the export's units shows the charge. If your quota, spend cap or project cap can't cover it, the export fails with monthly_quota_exceeded, spend_cap_reached or project_cap_exceeded and nothing is charged, and a failed export is refunded. A full snapshot of about 230,000 listings costs about 2,300 units. The open-data datasets are free on every plan and cost nothing. An organization can run 2 exports at once and create 20 a day; one export holds at most 2,000,000 rows.
What you may do with the files. Listing exports are Darak Data, under the same terms as the API, including keeping it for 30 days from retrieval unless your agreement says otherwise: re-export on a schedule rather than accumulating. Open-data exports are Saudi government open data, which you may keep and redistribute provided ATTRIBUTION.txt travels with them.