GCC Cultural Projects News
News of Gulf developers, hotels, banks and luxury brands commissioning art, building collections, sponsoring fairs or opening museums and cultural districts.
0 rows in the dataset
Download the dataset
Get every row this scraper has collected as one CSV or JSONL file. If the data is older than maxAgeHours, the scraper is re-run with its configured settings first. The key needs the datasets:export scope.
DOWNLOAD_ID=$(curl -s -X POST "https://api.pandorlabs.com/v1/datasets/cultural-projects-news/downloads" \ -H "Authorization: Bearer $PANDORLABS_KEY" \ -H "Content-Type: application/json" \ -d '{"maxAgeHours":24,"format":"csv"}' | jq -r '.id')while true; do STATUS=$(curl -s "https://api.pandorlabs.com/v1/downloads/$DOWNLOAD_ID" \ -H "Authorization: Bearer $PANDORLABS_KEY" | jq -r '.status') [ "$STATUS" != "refreshing" ] && break sleep 5donecurl -s "https://api.pandorlabs.com/v1/downloads/$DOWNLOAD_ID/file" \ -H "Authorization: Bearer $PANDORLABS_KEY" \ -o dataset.csvThe rate is 1 credit per 100 rows cached and 2 credits live, charged on the rows in the dataset when the download becomes ready. A failed refresh is not charged. The file stays downloadable for 24 hours. See pricing.
Start a run
To choose the targets yourself, send the parameters below as input. The call returns 202 with the run; the key needs the scrapers:run scope and the account a positive credit balance.
curl -X POST "https://api.pandorlabs.com/v1/scrapers/cultural-projects-news/runs" \ -H "Authorization: Bearer $PANDORLABS_KEY" \ -H "Content-Type: application/json" \ -d '{ "input": { "queries": [ "Emaar art", "Emaar public art", "Aldar public art", "Aldar art", "ROSHN art", "\"Red Sea Global\" art", "\"Diriyah Company\" art", "NEOM art commission", "\"Dar Global\" art", "Damac art", "Omniyat art", "Meraas art", "Nakheel art", "\"Dubai Holding\" art", "Modon art Abu Dhabi", "\"public art\" Riyadh", "\"public art\" Dubai", "\"public art\" Abu Dhabi", "\"public art\" Doha", "artwork commissioned Dubai", "art commission Saudi", "\"art collection\" bank UAE", "\"art collection\" Saudi company", "\"corporate art collection\" Gulf", "\"art prize\" bank Gulf", "\"art prize\" Saudi", "\"private museum\" UAE", "\"private museum\" Saudi", "new museum Saudi Arabia announced", "art foundation launch Saudi", "art foundation launch UAE", "hotel \"art collection\" Dubai", "hotel art Riyadh opening", "hotel artist commission Abu Dhabi", "\"Art Dubai\" partner", "\"Abu Dhabi Art\" partner", "\"Frieze Abu Dhabi\" partner", "\"Diriyah Biennale\" sponsor", "\"Islamic Arts Biennale\" partner", "art sponsor Qatar", "\"cultural district\" Abu Dhabi", "\"cultural district\" Riyadh", "\"cultural district\" Dubai", "Kuwait art museum", "Bahrain art commission", "Oman art museum", "فن عام الرياض", "متحف خاص السعودية", "مجموعة فنية دبي", "إعمار أعمال فنية", "حي ثقافي الرياض" ], "countries": [ "UAE", "Saudi Arabia", "Qatar", "Kuwait", "Bahrain", "Oman" ], "sinceDays": 180, "maxItems": 1000 } }'A run is billed at the live rate once it finishes: 2 credits per 100 rows it collected. A run that collects nothing costs nothing.
Parameters
Every parameter is optional. Anything you leave out uses the default shown here; an unknown name or an invalid value is rejected with a 400 that lists each problem.
Targeting
queriesstring[]
Search queries
Google News search queries. Arabic queries are searched in the Arabic UAE edition, the rest in the English edition. Empty restores the default developer, hotel, bank, sponsor and museum set.
- Default
["Emaar art","Emaar public art","Aldar public art","Aldar art","ROSHN art","\"Red Sea Global\" art","\"Diriyah Company\" art","NEOM art commission","\"Dar Global\" art","Damac art","Omniyat art","Meraas art","Nakheel art","\"Dubai Holding\" art","Modon art Abu Dhabi","\"public art\" Riyadh","\"public art\" Dubai","\"public art\" Abu Dhabi","\"public art\" Doha","artwork commissioned Dubai","art commission Saudi","\"art collection\" bank UAE","\"art collection\" Saudi company","\"corporate art collection\" Gulf","\"art prize\" bank Gulf","\"art prize\" Saudi","\"private museum\" UAE","\"private museum\" Saudi","new museum Saudi Arabia announced","art foundation launch Saudi","art foundation launch UAE","hotel \"art collection\" Dubai","hotel art Riyadh opening","hotel artist commission Abu Dhabi","\"Art Dubai\" partner","\"Abu Dhabi Art\" partner","\"Frieze Abu Dhabi\" partner","\"Diriyah Biennale\" sponsor","\"Islamic Arts Biennale\" partner","art sponsor Qatar","\"cultural district\" Abu Dhabi","\"cultural district\" Riyadh","\"cultural district\" Dubai","Kuwait art museum","Bahrain art commission","Oman art museum","فن عام الرياض","متحف خاص السعودية","مجموعة فنية دبي","إعمار أعمال فنية","حي ثقافي الرياض"]- Example
"public art" Riyadh
countriesenum[]
Countries
An article is kept only when it is about one of these countries, judged from places named in its title and summary or from the home country of a company it names.
- Default
["UAE","Saudi Arabia","Qatar","Kuwait","Bahrain","Oman"]- Allowed values
UAESaudi ArabiaQatarKuwaitBahrainOman
sinceDaysnumber
Published within (days)
- Default
180- Range
- 1 to 3650
maxItemsnumber
Max articles
- Default
1000- Range
- 1 to 20000
Advanced
includePressFeedsboolean
Include regional art press feeds
Also reads The Art Newspaper, Canvas, Harper's Bazaar Arabia, The National, screened by the same rules.
- Default
true
keepUnclassifiedboolean
Keep articles with no signal
By default an article must match a commission, collection, museum, sponsorship, hotel or cultural-district rule, or name a known company, to be kept.
- Default
false
collapseStoriesboolean
One row per story
Drops an article whose headline shares most of its words with one already kept, so a story syndicated by twenty outlets yields one lead.
- Default
true
resolveUrlsboolean
Resolve publisher URLs
Google News links are redirects. Resolving costs two requests to Google per kept article.
- Default
true
fetchSnippetsboolean
Fetch article summaries
Google News feeds carry no summary, so the publisher page's description is read. One request to the publisher per kept article.
- Default
true
concurrencynumber
Parallel articles
- Default
4- Range
- 1 to 10
requestDelayMsnumber
Delay between feed requests (ms)
- Default
300- Range
- 0 to 30000
Input as JSON Schema
The same schema the API validates against. Use it as a tool input schema or to generate a typed client.
{ "type": "object", "additionalProperties": false, "properties": { "queries": { "type": "array", "items": { "type": "string" }, "maxItems": 1000, "title": "Search queries", "description": "Google News search queries. Arabic queries are searched in the Arabic UAE edition, the rest in the English edition. Empty restores the default developer, hotel, bank, sponsor and museum set.", "default": [ "Emaar art", "Emaar public art", "Aldar public art", "Aldar art", "ROSHN art", "\"Red Sea Global\" art", "\"Diriyah Company\" art", "NEOM art commission", "\"Dar Global\" art", "Damac art", "Omniyat art", "Meraas art", "Nakheel art", "\"Dubai Holding\" art", "Modon art Abu Dhabi", "\"public art\" Riyadh", "\"public art\" Dubai", "\"public art\" Abu Dhabi", "\"public art\" Doha", "artwork commissioned Dubai", "art commission Saudi", "\"art collection\" bank UAE", "\"art collection\" Saudi company", "\"corporate art collection\" Gulf", "\"art prize\" bank Gulf", "\"art prize\" Saudi", "\"private museum\" UAE", "\"private museum\" Saudi", "new museum Saudi Arabia announced", "art foundation launch Saudi", "art foundation launch UAE", "hotel \"art collection\" Dubai", "hotel art Riyadh opening", "hotel artist commission Abu Dhabi", "\"Art Dubai\" partner", "\"Abu Dhabi Art\" partner", "\"Frieze Abu Dhabi\" partner", "\"Diriyah Biennale\" sponsor", "\"Islamic Arts Biennale\" partner", "art sponsor Qatar", "\"cultural district\" Abu Dhabi", "\"cultural district\" Riyadh", "\"cultural district\" Dubai", "Kuwait art museum", "Bahrain art commission", "Oman art museum", "فن عام الرياض", "متحف خاص السعودية", "مجموعة فنية دبي", "إعمار أعمال فنية", "حي ثقافي الرياض" ], "examples": [ "\"public art\" Riyadh" ] }, "countries": { "type": "array", "items": { "type": "string", "enum": [ "UAE", "Saudi Arabia", "Qatar", "Kuwait", "Bahrain", "Oman" ] }, "uniqueItems": true, "title": "Countries", "description": "An article is kept only when it is about one of these countries, judged from places named in its title and summary or from the home country of a company it names.", "default": [ "UAE", "Saudi Arabia", "Qatar", "Kuwait", "Bahrain", "Oman" ] }, "sinceDays": { "type": "number", "minimum": 1, "maximum": 3650, "title": "Published within (days)", "default": 180 }, "maxItems": { "type": "number", "minimum": 1, "maximum": 20000, "title": "Max articles", "default": 1000 }, "includePressFeeds": { "type": "boolean", "title": "Include regional art press feeds", "description": "Also reads The Art Newspaper, Canvas, Harper's Bazaar Arabia, The National, screened by the same rules.", "default": true }, "keepUnclassified": { "type": "boolean", "title": "Keep articles with no signal", "description": "By default an article must match a commission, collection, museum, sponsorship, hotel or cultural-district rule, or name a known company, to be kept.", "default": false }, "collapseStories": { "type": "boolean", "title": "One row per story", "description": "Drops an article whose headline shares most of its words with one already kept, so a story syndicated by twenty outlets yields one lead.", "default": true }, "resolveUrls": { "type": "boolean", "title": "Resolve publisher URLs", "description": "Google News links are redirects. Resolving costs two requests to Google per kept article.", "default": true }, "fetchSnippets": { "type": "boolean", "title": "Fetch article summaries", "description": "Google News feeds carry no summary, so the publisher page's description is read. One request to the publisher per kept article.", "default": true }, "concurrency": { "type": "number", "minimum": 1, "maximum": 10, "title": "Parallel articles", "default": 4 }, "requestDelayMs": { "type": "number", "minimum": 0, "maximum": 30000, "title": "Delay between feed requests (ms)", "default": 300 } }}Run, poll, read rows
The run is asynchronous. Poll it until it reaches a terminal status and its billing is paid, then page through its rows. Until then the rows endpoint answers 409 (still queued or running) or 402 (payment required).
RUN_ID=$(curl -s -X POST "https://api.pandorlabs.com/v1/scrapers/cultural-projects-news/runs" \ -H "Authorization: Bearer $PANDORLABS_KEY" \ -H "Content-Type: application/json" \ -d '{ "input": { "queries": [ "Emaar art", "Emaar public art", "Aldar public art", "Aldar art", "ROSHN art", "\"Red Sea Global\" art", "\"Diriyah Company\" art", "NEOM art commission", "\"Dar Global\" art", "Damac art", "Omniyat art", "Meraas art", "Nakheel art", "\"Dubai Holding\" art", "Modon art Abu Dhabi", "\"public art\" Riyadh", "\"public art\" Dubai", "\"public art\" Abu Dhabi", "\"public art\" Doha", "artwork commissioned Dubai", "art commission Saudi", "\"art collection\" bank UAE", "\"art collection\" Saudi company", "\"corporate art collection\" Gulf", "\"art prize\" bank Gulf", "\"art prize\" Saudi", "\"private museum\" UAE", "\"private museum\" Saudi", "new museum Saudi Arabia announced", "art foundation launch Saudi", "art foundation launch UAE", "hotel \"art collection\" Dubai", "hotel art Riyadh opening", "hotel artist commission Abu Dhabi", "\"Art Dubai\" partner", "\"Abu Dhabi Art\" partner", "\"Frieze Abu Dhabi\" partner", "\"Diriyah Biennale\" sponsor", "\"Islamic Arts Biennale\" partner", "art sponsor Qatar", "\"cultural district\" Abu Dhabi", "\"cultural district\" Riyadh", "\"cultural district\" Dubai", "Kuwait art museum", "Bahrain art commission", "Oman art museum", "فن عام الرياض", "متحف خاص السعودية", "مجموعة فنية دبي", "إعمار أعمال فنية", "حي ثقافي الرياض" ], "countries": [ "UAE", "Saudi Arabia", "Qatar", "Kuwait", "Bahrain", "Oman" ], "sinceDays": 180, "maxItems": 1000 } }' | jq -r '.id')while true; do RUN=$(curl -s "https://api.pandorlabs.com/v1/runs/$RUN_ID" \ -H "Authorization: Bearer $PANDORLABS_KEY") STATUS=$(echo "$RUN" | jq -r '.status') BILLING=$(echo "$RUN" | jq -r '.billing.status') case "$STATUS" in queued|running) ;; *) [ "$BILLING" != "pending" ] && break ;; esac sleep 5doneecho "$RUN" | jq '{status, rowCount, billing}'curl -s "https://api.pandorlabs.com/v1/runs/$RUN_ID/rows?page=1&limit=100" \ -H "Authorization: Bearer $PANDORLABS_KEY"See the API reference for pagination, cancelling and listing runs.
Output fields
Rows have no fixed schema; these are the fields observed in the rows collected so far. Coverage is the share of rows where the field is present.
No rows collected yet, so no fields have been observed. Run the scraper once and they will appear here.
