Datasets API endpoint
Searches public Facebook Page contact records stored in a search index — website, email, phone, WhatsApp, category and like count, discovered through business-search enumeration, domain-scoped scans, and Wikidata seeding, then hydrated from each Page's public About tab. Sort enum: `relevance`, `likes_desc`, `likes_asc`, `hydrated_at_desc`, `hydrated_at_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).
/datasets/facebook-pages/searchPages are found through several discovery sources — bulk business-search enumeration, domain-scoped WARC scans, and Wikidata seeding, in roughly that order of volume — and filled in from each Page's public About tab. Filter or facet on discovery_source to see the current mix.
Dataset id enum:
facebook-pagesQuery parameters:
q: optional full-text query over title and address, max 256 characters.page_id: optional exact Facebook Page id filter, max 128 characters.identifier: optional exact Page username/identifier filter (case-insensitive), max 128 characters.category: optional exact Page category filter (case-insensitive), max 128 characters.discovery_source: optional exact filter for how the Page was discovered (e.g. business_search, warc_domain_scan, wikidata), max 128 characters.has_website: optional filter for Pages with a linked website.has_email: optional filter for Pages with a public contact email.has_phone: optional filter for Pages with at least one public phone number.has_whatsapp: optional filter for Pages with a public WhatsApp contact.min_likes / max_likes: optional Page like-count bounds.hydrated_after / hydrated_before: optional filters on last refresh date (RFC3339 or YYYY-MM-DD).sort: optional sort enum: relevance, likes_desc, likes_asc, hydrated_at_desc, hydrated_at_asc.page: optional page number, defaults to 1.page_size: optional page size, defaults to 20 and maxes at 100.Response behavior:
relevance sort when q is supplied, otherwise likes_desc.min_likes must not exceed max_likes.YYYY-MM-DD calendar date.10000; page * page_size must not exceed 10000.Record quality and freshness:
hydrated_at is the last successful Page fetch, not a guarantee that every contact field was present in that response.contact_observed_at, when present, records the latest complete-section observation for email, phones, address, category, website, and whatsapp. Fields absent from a complete section are cleared; a partial response preserves prior contact values and their observation times.1 credit per record returned, minimum 2. A search that returns 20 records costs 20 credits, a full page of 100 costs 100, and an empty or one-record result costs 2. You are charged for what comes back, not for the page_size you ask for, but your balance must cover the requested page_size for the call to be accepted. The response header x-credit-cost shows what a call was charged.
| Field | Filled in, of 20 checked | Values in the sample |
|---|---|---|
| contact_observed_at | 19 | |
| page_id | 20 | |
| identifier | 20 | |
| title | 20 | |
| source_url | 20 | facebook.com |
| website | 13 | tudum.com and 10 other hosts |
| category | 19 | |
| likes | 20 | 82,206,503 to 205,290,748, median 107,039,067 |
| discovery_source | 20 | |
| status | 20 | |
| discovered_at | 20 | 2026-07-30 to 2026-09-05 |
| hydrated_at | 20 | 2026-09-19 to 2026-10-13 |
| 1 | ||
| phones | 4 | median 1 entry |
| address | 3 | |
| 2 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| q | string | No | Full-text query over title and address, max 256 characters | ||
| page_id | string | No | Exact Facebook Page id filter, max 128 characters | ||
| identifier | string | No | Exact Page username/identifier filter (case-insensitive), max 128 characters | ||
| category | string | No | Exact Page category filter (case-insensitive), max 128 characters | ||
| discovery_source | string | No | Exact filter for how the Page was discovered (e.g. business_search, warc_domain_scan, wikidata), max 128 characters | ||
| has_website | boolean | No | Filter by a linked website | ||
| has_email | boolean | No | Filter by a public contact email | ||
| has_phone | boolean | No | Filter by at least one public phone number | ||
| has_whatsapp | boolean | No | Filter by a public WhatsApp contact | ||
| min_likes | integer | No | Minimum Page like count | ||
| max_likes | integer | No | Maximum Page like count | ||
| hydrated_after | string | No | Records last refreshed on or after this date (RFC3339 or YYYY-MM-DD) | ||
| hydrated_before | string | No | Records last refreshed on or before this date (RFC3339 or YYYY-MM-DD) | ||
| sort | string | No | Sort enum: relevance, likes_desc, likes_asc, hydrated_at_desc, hydrated_at_asc Allowed values: relevance, likes_desc, likes_asc, hydrated_at_desc, hydrated_at_asc. | ||
| page | integer | No | 1 | Page number, defaults to 1 | |
| page_size | integer | No | 20 and maxes at 100 | Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/datasets/facebook-pages/search?q=coffee&has_website=true&has_email=true&has_phone=true&has_whatsapp=true&sort=relevance&page=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"dataset": "facebook-pages",
"items": [
{
"page_id": "104958closes123",
"identifier": "bata.official",
"title": "Bata",
"source_url": "https://www.facebook.com/bata.official",
"website": "https://www.bata.com",
"email": "customercare@bata.com",
"phones": [
"+91-1800-121-9800"
],
"address": "Mumbai, India",
"category": "Shoe Store",
"whatsapp": "",
"likes": 5200000,
"discovery_source": "wikidata",
"status": "ok",
"discovered_at": "2026-07-30T00:00:00Z",
"hydrated_at": "2026-08-15T00:00:00Z"
}
],
"page": 1,
"page_size": 20,
"total": 1231862,
"sort": "likes_desc"
}
}Request schema
No body schema
Response schema
#/definitions/datasets.facebookPagesSearchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | datasets.FacebookPageSearchResponse | No | ||||
| data.dataset | string | No | ||||
| data.items | array | No | ||||
| data.items[].address | string | No | ||||
| data.items[].category | string | No | ||||
| data.items[].contact_observed_at | object | No | ||||
| data.items[].discovered_at | string | No | ||||
| data.items[].discovery_source | string | No | ||||
| data.items[].email | string | No | ||||
| data.items[].hydrated_at | string | No | ||||
| data.items[].identifier | string | No | ||||
| data.items[].likes | integer | No | ||||
| data.items[].page_id | string | No | ||||
| data.items[].phones | array | No | ||||
| data.items[].source_url | string | No | ||||
| data.items[].status | string | No | ||||
| data.items[].title | string | No | ||||
| data.items[].website | string | No | ||||
| data.items[].whatsapp | string | No | ||||
| data.page | integer | No | ||||
| data.page_size | integer | No | ||||
| data.sort | string | No | ||||
| data.total | integer | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/datasets/facebook-pages/search?q=coffee&has_website=true&has_email=true&has_phone=true&has_whatsapp=true&sort=relevance&page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"