UAE Family Offices, Foundations & Private Trust Companies (DIFC + ADGM registers)
Family offices, single family offices, private trust companies, foundations and family holding vehicles on the DIFC and ADGM public company registers — registration number, legal type, status, incorporation date, licensed activities, registered address, current directors, shareholders and other officers.
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/uae-family-office-registers/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/uae-family-office-registers/runs" \ -H "Authorization: Bearer $PANDORLABS_KEY" \ -H "Content-Type: application/json" \ -d '{ "input": { "registers": [ "difc", "adgm" ], "keywords": [ "Single Family Office", "Family Office", "Private Trust Company", "Family Holding", "Family Investment", "Family", "PTC", "Private Trust", "Trust Company", "Foundation", "Private Office", "Wealth", "Trust" ], "activities": [ "Family Office", "Trust Services" ], "includeFoundations": true } }'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
registersenum[]
Registers
- Default
["difc","adgm"]- Allowed values
difcadgm
keywordsstring[]
Name keywords
Each keyword is searched against entity names on both registers. A keyword that contains a broader one in the list (Family Office inside Family) is not searched again but still labels the match.
- Default
["Single Family Office","Family Office","Private Trust Company","Family Holding","Family Investment","Family","PTC","Private Trust","Trust Company","Foundation","Private Office","Wealth","Trust"]
activitiesstring[]
ADGM licensed activities
ADGM can be searched by licensed activity, which finds single family offices whose names say nothing about it. Add "Proprietary investment" for family holding vehicles. DIFC exposes activities only on rows already found by name.
- Default
["Family Office","Trust Services"]
includeFoundationsboolean
Every ADGM foundation
ADGM lets the foundations register be listed whole, whatever the name.
- Default
true
activeOnlyboolean
Active entities only
Drops struck off, dissolved, deregistered and expired entities. DIFC counts only "Active", ADGM only "Registered".
- Default
true
includeAllboolean
Keep every search hit
By default a name hit must contain the keyword as a whole word (Trust, not Trustpilot). Turn on to keep every substring hit the registers return.
- Default
false
includeOfficersboolean
Fetch directors, shareholders and officers
One extra request per entity on each register: current directors, shareholders, secretaries and members, and for ADGM foundations the founders, council members and guardians (beneficiaries are left out). Also fills ADGM licensed activities.
- Default
true
maxItemsnumber
Max entities
- Default
10000- Range
- 1 to 50000
Advanced
requestDelayMsnumber
Delay between requests (ms)
DIFC answers bursts with HTTP 429; requests back off and retry on top of this pause.
- 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": { "registers": { "type": "array", "items": { "type": "string", "enum": [ "difc", "adgm" ] }, "uniqueItems": true, "title": "Registers", "default": [ "difc", "adgm" ] }, "keywords": { "type": "array", "items": { "type": "string" }, "maxItems": 1000, "title": "Name keywords", "description": "Each keyword is searched against entity names on both registers. A keyword that contains a broader one in the list (Family Office inside Family) is not searched again but still labels the match.", "default": [ "Single Family Office", "Family Office", "Private Trust Company", "Family Holding", "Family Investment", "Family", "PTC", "Private Trust", "Trust Company", "Foundation", "Private Office", "Wealth", "Trust" ] }, "activities": { "type": "array", "items": { "type": "string" }, "maxItems": 1000, "title": "ADGM licensed activities", "description": "ADGM can be searched by licensed activity, which finds single family offices whose names say nothing about it. Add \"Proprietary investment\" for family holding vehicles. DIFC exposes activities only on rows already found by name.", "default": [ "Family Office", "Trust Services" ] }, "includeFoundations": { "type": "boolean", "title": "Every ADGM foundation", "description": "ADGM lets the foundations register be listed whole, whatever the name.", "default": true }, "activeOnly": { "type": "boolean", "title": "Active entities only", "description": "Drops struck off, dissolved, deregistered and expired entities. DIFC counts only \"Active\", ADGM only \"Registered\".", "default": true }, "includeAll": { "type": "boolean", "title": "Keep every search hit", "description": "By default a name hit must contain the keyword as a whole word (Trust, not Trustpilot). Turn on to keep every substring hit the registers return.", "default": false }, "includeOfficers": { "type": "boolean", "title": "Fetch directors, shareholders and officers", "description": "One extra request per entity on each register: current directors, shareholders, secretaries and members, and for ADGM foundations the founders, council members and guardians (beneficiaries are left out). Also fills ADGM licensed activities.", "default": true }, "maxItems": { "type": "number", "minimum": 1, "maximum": 50000, "title": "Max entities", "default": 10000 }, "requestDelayMs": { "type": "number", "minimum": 0, "maximum": 30000, "title": "Delay between requests (ms)", "description": "DIFC answers bursts with HTTP 429; requests back off and retry on top of this pause.", "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/uae-family-office-registers/runs" \ -H "Authorization: Bearer $PANDORLABS_KEY" \ -H "Content-Type: application/json" \ -d '{ "input": { "registers": [ "difc", "adgm" ], "keywords": [ "Single Family Office", "Family Office", "Private Trust Company", "Family Holding", "Family Investment", "Family", "PTC", "Private Trust", "Trust Company", "Foundation", "Private Office", "Wealth", "Trust" ], "activities": [ "Family Office", "Trust Services" ], "includeFoundations": true } }' | 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.
