logoPandorLabs
Lead Generation

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.

cultural-projects-newslead-generationnewsartculturegccuaesaudi-arabia

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.csv

The 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

  • queries

    string[]

    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
  • countries

    enum[]

    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
    UAE
    Saudi Arabia
    Qatar
    Kuwait
    Bahrain
    Oman
  • sinceDays

    number

    Published within (days)

    Default
    180
    Range
    1 to 3650
  • maxItems

    number

    Max articles

    Default
    1000
    Range
    1 to 20000

Advanced

  • includePressFeeds

    boolean

    Include regional art press feeds

    Also reads The Art Newspaper, Canvas, Harper's Bazaar Arabia, The National, screened by the same rules.

    Default
    true
  • keepUnclassified

    boolean

    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
  • collapseStories

    boolean

    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
  • resolveUrls

    boolean

    Resolve publisher URLs

    Google News links are redirects. Resolving costs two requests to Google per kept article.

    Default
    true
  • fetchSnippets

    boolean

    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
  • concurrency

    number

    Parallel articles

    Default
    4
    Range
    1 to 10
  • requestDelayMs

    number

    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.

inputSchema
{  "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.

© 2026 PandorLabs LLC. All rights reserved.