Search ready-made scraped datasets for local business research with filters, facets, geo queries, and repeatable API output.
Structured output
Use Crawlora's Datasets API to query stored Google Maps business records that have already been collected and indexed. The search endpoint is designed for repeatable product workflows, enrichment, analytics, and exports where the Google Maps app's manual search and limited refinement controls are not enough.
Dataset workflows
The Google Maps app is built for interactive discovery. Crawlora dataset search is built for structured, repeatable queries over indexed records, including filters, facets, pagination, geo radius search, distance sorting, and API output that can feed products and analytics.
Browse dataset endpointsRequest schema
These parameters come from the active Search stored Google Maps businesses catalog entry.
| Parameter | Type | Required | Description | Example |
|---|---|---|---|---|
| q | string | No | Full-text business search query, max 256 characters | - |
| category | string | No | Exact locale-specific Google Maps category label; use the category facet to discover values, max 128 characters | - |
| country | string | No | Exact country filter, max 128 characters | - |
| state | string | No | Exact state filter, max 128 characters | - |
| county | string | No | Exact county filter, max 128 characters | - |
| city | string | No | Exact city filter, max 128 characters | - |
| town | string | No | Exact town filter, max 128 characters | - |
| min_rating | number | No | Minimum rating, 0 through 5. Businesses with no aggregate Google rating are returned with rating null, so any min_rating above 0 excludes them. | - |
| min_review_count | integer | No | Minimum review count | - |
| has_website | boolean | No | Filter by website presence | - |
| has_phone | boolean | No | Filter by phone presence | - |
| lat | number | No | Latitude for radius filtering or distance sort | - |
| lon | number | No | Longitude for radius filtering or distance sort | - |
| radius_m | integer | No | Radius in meters, 1 through 50000; requires lat and lon when supplied | - |
| sort | string | No | Sort enum: relevance, updated_at_desc, rating_desc, review_count_desc, distance_asc | - |
| page | integer | No | Page number, defaults to 1 | - |
| page_size | integer | No | Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000 | - |
Example JSON
This example is rendered from the active endpoint catalog so the page stays aligned with Docs and Playground.
{
"code": 200,
"msg": "OK",
"data": {
"dataset": "google-map-businesses",
"items": [
{
"place_id": "ChIJ99URUeOAhYAR0J5ZUxTesDQ",
"name": "Hotel Zephyr San Francisco",
"category": [
"hotel"
],
"rating": 4.1,
"review_count": 3213
}
],
"page": 1,
"page_size": 20,
"total": 1,
"sort": "relevance"
}
}Endpoint catalog
/datasetsLists available read-only scraped datasets and the capabilities supported by each dataset.
Response notes
- Returns dataset metadata and the capabilities each dataset supports. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "items": [ { "id": "google-map-businesses", "name": "Google Maps Businesses", "capabilities": ["search", "detail", "facets", "nearby"] }, { "id": "github-users", "name": "GitHub Users", "capabilities": ["search", "detail", "facets", "nearby"] }, { "id": "apps", "name": "Mobile Apps", "capabilities": ["search"] }, { "id": "chrome-extensions", "name": "Chrome Extensions", "capabilities": ["search", "detail", "facets", "history", "trending", "changes"] }, { "id": "apps-charts", "name": "App Store Charts", "capabilities": ["search"] }, { "id": "apps-reviews", "name": "App Reviews", "capabilities": ["search"] }, { "id": "creators", "name": "TikTok Creators", "capabilities": ["search"] }, { "id": "airbnb-markets", "name": "Airbnb Markets", "capabilities": ["search", "detail", "facets", "nearby"] } ] } } ```
MCP tool datasets_list
/datasets/google-map-businesses/searchSearches Google Maps business records stored in a search index. Sort enum: `relevance`, `updated_at_desc`, `rating_desc`, `review_count_desc`, `distance_asc`. `category` is the exact Google Maps category label returned for the business locale; it can be localized, non-ASCII, or contain punctuation, so use the category facet to discover exact filter values. A `rating` of `null` means no aggregate rating is available. A `review_count` of `null` means Google did not return a count; numeric `0` means Google confirmed zero reviews. `rating_desc` sorts unrated businesses last, and `min_rating` above 0 excludes them. Use `has_geo=false` to isolate locationless service-area businesses (which have a `null` `geo`).
Response notes
- Defaults to `relevance` sort when `q` is supplied. - Defaults to `updated_at_desc` sort when no `q` is supplied. - `lat` and `lon` must be supplied together. `distance_asc` requires `lat` and `lon`, but does not require `radius_m`. - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - A `null` `rating` in a result means no aggregate rating is available for that business (too few reviews, or a place type Google does not rate) — it is never a literal zero-star score. A present `rating` is always between `1.0` and `5.0`. - A `null` `review_count` means Google did not return a count for that business. Numeric `0` means Google confirmed zero reviews; positive values are confirmed counts. `review_count_desc` sorts missing counts last. - Invalid enum values return the standard invalid params envelope. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "google-map-businesses", "items": [ { "place_id": "ChIJ99URUeOAhYAR0J5ZUxTesDQ", "name": "Hotel Zephyr San Francisco", "category": ["hotel"], "rating": 4.1, "review_count": 3213 } ], "page": 1, "page_size": 20, "total": 1, "sort": "relevance" } } ```
MCP tool datasets_google_map_search
/datasets/google-map-businesses/nearbySearches stored Google Maps businesses near a coordinate in dataset id enum value `google-map-businesses`. `category` is the exact Google Maps category label returned for the business locale; it can be localized, non-ASCII, or contain punctuation, so use the category facet to discover exact filter values. A `rating` of `null` means no aggregate rating is available. A `review_count` of `null` means Google did not return a count; numeric `0` means Google confirmed zero reviews. `min_rating` above 0 excludes unrated businesses.
Response notes
- Sorts by `distance_asc`. - Includes `distance_m` on items when the search index returns geo-distance sort values. - A `null` `rating` in a result means no aggregate rating is available for that business (never a literal zero-star score); a present `rating` is always between `1.0` and `5.0`. - A `null` `review_count` means Google did not return a count for that business. Numeric `0` means Google confirmed zero reviews; positive values are confirmed counts. - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "google-map-businesses", "items": [ { "place_id": "ChIJ99URUeOAhYAR0J5ZUxTesDQ", "name": "Hotel Zephyr San Francisco", "distance_m": 120.4 } ], "page": 1, "page_size": 20, "total": 1, "sort": "distance_asc" } } ```
MCP tool datasets_google_map_nearby
/datasets/google-map-businesses/facetsReturns terms aggregation counts for Google Maps businesses. Facet enum: `category`, `country`, `state`, `county`, `city`, `town`, `website_status`. Category facet values are exact locale-specific Google Maps labels and can be localized, non-ASCII, or contain punctuation; pass a returned value unchanged to the category filter.
Response notes
- For `facet=category`, returned `value`s are exact locale-specific Google Maps labels. Pass a selected value unchanged to the `category` filter. - Invalid facet enum values return the standard invalid params envelope. - `lat` and `lon` must be supplied together. `distance_asc` requires `lat` and `lon`, but does not require `radius_m`. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "google-map-businesses", "facet": "city", "items": [ { "value": "San Francisco", "count": 42 } ] } } ```
MCP tool datasets_google_map_facets
/datasets/google-map-businesses/items/{place_id}Returns one stored Google Maps business by Google place_id from dataset id enum value `google-map-businesses`. The `category` field contains the exact Google Maps category label returned for the business locale and can be localized, non-ASCII, or contain punctuation. A `rating` of `null` means no aggregate rating is available. A `review_count` of `null` means Google did not return a count; numeric `0` means Google confirmed zero reviews. Locationless service-area businesses (online/mobile/home-based) have a `null` `geo`.
Response notes
- The `category` field contains the locale-specific label returned by Google Maps and can be localized, non-ASCII, or contain punctuation. - A `null` `rating` means no aggregate rating is available for that business (never a literal zero-star score); a present `rating` is always between `1.0` and `5.0`. - A `null` `review_count` means Google did not return a count for that business. Numeric `0` means Google confirmed zero reviews; positive values are confirmed counts. - Returns `404` when the Place ID is not present in the stored dataset. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "place_id": "ChIJ99URUeOAhYAR0J5ZUxTesDQ", "name": "Hotel Zephyr San Francisco", "address": "250 Beach St, San Francisco, CA 94133", "website": "https://www.hotelzephyrsf.com/" } } ```
MCP tool datasets_google_map_item
/datasets/airbnb-markets/facetsReturns suppressed distribution counts over the Airbnb markets dataset, honoring the same filters as search. Facet enum: `country`, `market`, `currency`, `superhost`, `guest_favorite`, `rating_band`, `review_band`, `admin1` (top subdivision), `locality` (settlement), `room_type` (`entire_place`/`private_room`/`hotel`/`shared_room`), `property_type` (Airbnb's canonical listing type from the detail page), `amenities` (each amenity with the count of listings offering it). The `admin1`, `locality`, `room_type`, `property_type` and `amenities` facets stay empty until their enrichment coverage is high enough to be reliable. group_by enum: `country`, `market`, `admin1`, `locality`, `room_type`, `property_type`.
Response notes
- `facet` is required; unsupported values return the standard invalid params envelope. - `superhost` returns `superhost` and `not_superhost` bucket values. - `guest_favorite` returns `guest_favorite` and `not_guest_favorite` bucket values. The badge is an observed lower bound, so the `guest_favorite` count under-counts and `not_guest_favorite` correspondingly over-counts. - `rating_band` returns bucket values `<3`, `3-4`, `4-4.5`, `4.5-4.8`, `4.8+`. - `review_band` returns bucket values `<1`, `1-10`, `10-50`, `50-200`, `200+`. - The `admin1` (top subdivision), `locality` (settlement), `room_type`, `property_type` and `amenities` facets are enrichment-derived. `admin1`/`locality` come from a reverse-geocode pass; `room_type` returns bucket values `entire_place`, `private_room`, `hotel`, `shared_room`, classified from each listing's search-card descriptor; `property_type` returns Airbnb's finer canonical listing type read from the detail page; `amenities` returns each amenity (e.g. `Wifi`, `Pool`, `Free parking on premises`, `Pets allowed`) with the count of listings in the filtered market that offer it (a listing contributes to every amenity it has). Because each covers a growing share of the census, these facets return an **empty `items` array until that coverage is high enough** to be reliable, then fill in on their own as coverage grows. - Returns up to `50` buckets ordered by descending count. - Returns an empty `items` array (not an error) when no bucket clears the suppression floor. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "airbnb-markets", "facet": "currency", "items": [ { "value": "USD", "count": 512000 }, { "value": "EUR", "count": 388000 }, { "value": "BRL", "count": 96000 } ] } } ```
MCP tool datasets_airbnb_facets
/datasets/airbnb-markets/items/{country}Returns one country's full aggregate Airbnb market profile from dataset id enum value `airbnb-markets` — headline supply, Superhost share, Guest Favorite share (`guest_favorite_pct`, an observed lower bound), `avg_person_capacity` (average guests a listing sleeps over the detail-page-enriched sample), ratings, its top metros, bounding box, per-currency nightly-price percentiles, and a USD-normalized `price_usd` percentile block (converted via an approximate dated FX snapshot) for cross-country comparison. Aggregate-only. Returns 404 for a country below the suppression floor.
Response notes
- `avg_rating` is included only when the country has enough rated listings. - `superhost_pct` is an **observed lower bound** — it counts listings seen carrying the search-card Superhost badge, which renders inconsistently and under-counts. - `guest_favorite_pct` (with `guest_favorite_listings`) is the share of the country's listings carrying the Guest Favorite badge. Like `superhost_pct` it is an **observed lower bound** — the badge renders inconsistently on the search card, so it under-counts. - `superhost_pct_enriched` is the **reliable** Superhost share over a **random sample** of the country's listings enriched from the listing detail page (the sample is representative, so the rate is unbiased at partial coverage); `enriched_listings` (the sample size), `distinct_hosts` (distinct operators among the enriched listings) and `listings_per_host` (`enriched_listings / distinct_hosts`, an operator-concentration signal) accompany it. All four appear **only once the enriched sample is large enough to be reliable**, and are omitted otherwise; they populate for more countries over time as enrichment coverage grows. `distinct_hosts` is an aggregate count only — no host identity is returned. - `guest_favorite_pct_enriched` is the **reliable** Guest Favorite share over that same detail-page-enriched sample (the detail page carries an authoritative Guest Favorite flag, unlike the inconsistent search-card badge behind `guest_favorite_pct`), reported under the same gate as `superhost_pct_enriched` and omitted until the sample is large enough. - `avg_person_capacity` is the average number of guests a listing sleeps, over that same detail-page-enriched sample; reported under the same gate and omitted otherwise. Combine with `price_usd`/`currencies` medians for a rough price-per-guest read. - `currencies` prices are per-currency medians; most listings are priced in USD, so those are broadly comparable across countries. - `currencies` reports the 25th/50th/75th nightly-price percentiles for each currency with enough priced listings. - `price_usd` reports the country-wide 25th/50th/75th nightly-price percentiles normalized to USD via an **approximate, dated FX snapshot** — the cross-country-comparable complement to the per-currency `currencies` block. It is a market-level approximation (rates drift), not an exact conversion, and is present only when enough listings carry a USD-normalized price. - `metros` lists the country's largest metro markets that clear the suppression floor; each metro also carries `median_price_usd`, its median nightly price in USD (same approximate FX snapshot). - Returns `404` with the standard error envelope when the country has no listings above the suppression floor. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "country": "US", "listings": 1212294, "superhost_listings": 303073, "superhost_pct": 25, "guest_favorite_listings": 121229, "guest_favorite_pct": 10, "rated_listings": 776000, "avg_rating": 4.72, "avg_review_count": 31.5, "enriched_listings": 280000, "superhost_pct_enriched": 29.4, "guest_favorite_pct_enriched": 18.7, "avg_person_capacity": 4.2, "distinct_hosts": 214500, "listings_per_host": 1.31, "last_seen": "2026-07-03T00:00:00Z", "bounds": { "top_left": { "lat": 71.4, "lon": -177.1 }, "bottom_right": { "lat": 18.9, "lon": -66.9 } }, "metros": [ { "key": "Austin", "listings": 12040, "superhost_listings": 6020, "superhost_pct": 50, "guest_favorite_listings": 3010, "guest_favorite_pct": 25, "rated_listings": 9800, "avg_rating": 4.9, "median_price_usd": 205 } ], "currencies": [ { "currency": "USD", "listings": 512000, "p25": 95, "p50": 150, "p75": 260 } ], "price_usd": { "listings": 534000, "p25": 96, "p50": 152, "p75": 265 } } } ```
MCP tool datasets_airbnb_item
/datasets/airbnb-markets/nearbyReturns an aggregate geohash-grid density map of Airbnb listings within a radius of a coordinate, from dataset id enum value `airbnb-markets`. Each cell reports a centroid, listing count and Superhost share; thin cells are suppressed. Aggregate-only.
Response notes
- Each `cells` entry carries the geohash, its centroid `lat`/`lon`, `listings` count and `superhost_pct`. - `precision` in the response is the geohash precision actually used. - Superhost figures count listings observed carrying the Superhost badge and are a lower bound, since the badge is recorded when a listing is scanned. - Returns an empty `cells` array (not an error) when no cell clears the suppression floor. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "airbnb-markets", "lat": 30.27, "lon": -97.74, "radius_m": 5000, "precision": 6, "cells": [ { "geohash": "9v6m", "lat": 30.27, "lon": -97.74, "listings": 320, "superhost_listings": 96, "superhost_pct": 30 } ], "total": 1 } } ```
MCP tool datasets_airbnb_nearby
/datasets/airbnb-markets/searchReturns aggregate Airbnb short-term-rental market rollups from the dataset id enum value `airbnb-markets`. Aggregate-only: each row is a market cell, never an individual listing. Thin cells are suppressed. group_by enum: `country`, `market`, `admin1` (top subdivision), `locality` (settlement), `room_type` (`entire_place`/`private_room`/`hotel`/`shared_room`), `property_type` (Airbnb's canonical listing type from the detail page). `admin1`, `locality`, `room_type` and `property_type` are enrichment-derived and stay empty until their coverage is high enough to be reliable. Each cell also carries `median_price_usd`, the median nightly price converted to USD via an approximate dated FX snapshot, for cross-country comparison (combine with `group_by=room_type` for median price by room type); `guest_favorite_pct`, the share of listings carrying the Guest Favorite badge (an observed lower bound, like `superhost_pct`); and `avg_person_capacity`, the average guests a listing sleeps over the detail-page-enriched sample. Sort enum: `listings_desc`, `superhost_pct_desc`, `rating_desc`, `key_asc`.
Response notes
- Grouping by `admin1`, `locality`, `room_type` or `property_type` returns enrichment-derived market cells (sub-country geography, or accommodation type). `admin1`/`locality` come from a reverse-geocode pass, `room_type` (`entire_place`, `private_room`, `hotel`, `shared_room`) is classified from each listing's search-card descriptor going forward, and `property_type` (Airbnb's finer canonical type) is read from the listing detail page. Because each covers a growing share of the census, these dimensions return an **empty `items` array until that coverage is high enough** for the cell counts to be reliable, then fill in on their own as coverage grows. `country` and `market` are always available. - `avg_person_capacity` is the average number of guests a listing sleeps, computed over the cell's detail-page-enriched sample; like the `*_enriched` fields it is reported only once that sample is large enough to be reliable. Combine it with `median_price_usd` for a rough price-per-guest read. - Pairing `group_by=room_type` with `median_price_usd` gives the median nightly USD price per accommodation type (e.g. entire homes vs private rooms), optionally filtered to one `country` or `market`. - `median_price_usd` is the cell's median nightly price converted to USD via an **approximate, dated FX snapshot**, so markets are price-comparable across countries despite Airbnb localizing the display currency. It is reported only for cells with enough USD-normalized priced listings and is a market-level approximation, not an exact conversion. - `avg_rating` is reported only for cells with enough rated listings, so a handful of reviews never swings a published market average; it is omitted otherwise. - `superhost_pct` is the Superhost share of the cell, from `0` through `100`. It is an **observed lower bound**: it counts listings seen carrying the Superhost badge on the search card, which renders inconsistently, so it under-counts. - `guest_favorite_pct` is the share of the cell's listings carrying the Guest Favorite badge, from `0` through `100`, with `guest_favorite_listings` the underlying count. Like `superhost_pct` it is an **observed lower bound** — the badge renders inconsistently on the search card, so it under-counts. - `superhost_pct_enriched` is the **reliable** Superhost share, computed over a **random sample** of the cell's listings enriched from the listing detail page (enrichment draws a representative sample, so the rate is unbiased even at partial coverage). It, along with `enriched_listings` (the size of that enriched sample), `distinct_hosts` (the number of distinct operators among the enriched listings) and `listings_per_host` (`enriched_listings / distinct_hosts`, an operator-concentration signal), is reported **only once the enriched sample is large enough to be reliable**; all four are omitted until then. Detail-page enrichment covers a growing subset of the census, so these fields appear for more markets over time. `distinct_hosts` is an aggregate count only — no host identity is ever returned. - `guest_favorite_pct_enriched` is the **reliable** Guest Favorite share over that same detail-page-enriched sample (the listing detail page carries an authoritative Guest Favorite flag, unlike the inconsistent search-card badge behind `guest_favorite_pct`). It is reported under the same gate as `superhost_pct_enriched` and omitted until the enriched sample is large enough. - The `min_listings` field in the response echoes the effective suppression floor that was applied. - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Invalid enum values return the standard invalid params envelope. - Returns an empty `items` array (not an error) when no cell clears the suppression floor. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "airbnb-markets", "group_by": "country", "items": [ { "key": "US", "listings": 1212294, "superhost_listings": 303073, "superhost_pct": 25, "guest_favorite_listings": 121229, "guest_favorite_pct": 10, "rated_listings": 776000, "avg_rating": 4.72, "avg_review_count": 31.5, "median_price_usd": 148, "enriched_listings": 280000, "superhost_pct_enriched": 29.4, "guest_favorite_pct_enriched": 18.7, "avg_person_capacity": 4.2, "distinct_hosts": 214500, "listings_per_host": 1.31, "last_seen": "2026-07-03T00:00:00Z" } ], "page": 1, "page_size": 20, "total": 1, "sort": "listings_desc", "min_listings": 50 } } ```
MCP tool datasets_airbnb_search
/datasets/apple-podcasts-shows/facetsReturns terms aggregation counts for the Apple Podcasts shows dataset. Facet enum: `genre`, `genre_id`, `country`, `content_advisory_rating`, `run_id`.
MCP tool datasets_apple_podcasts_shows_facets
/datasets/apple-podcasts-shows/items/{id}Returns one crawled Apple Podcasts show record by id from dataset id enum value `apple-podcasts-shows`.
MCP tool datasets_apple_podcasts_shows_item
/datasets/apple-podcasts-shows/searchSearches the crawled public Apple Podcasts show catalog stored in a search index. One row per show. Discovered from a country x genre x collection chart grid and a search-term sweep — not a full catalog of every Apple Podcasts show. Sort enum: `relevance`, `popularity`, `track_count_desc`, `release_desc`, `title_asc`.
MCP tool datasets_apple_podcasts_shows_search
/datasets/apps-charts/searchSearches daily top-chart snapshots scraped from the iOS App Store and Google Play, stored in a search index (one document per chart × snapshot × rank). With no `date` the latest snapshot is returned (today's chart); pair `app_id` with `sort=date_desc` for an app's rank over time. Store enum: `ios`, `android`. Chart type enum: `top_free`, `top_paid`, `top_grossing`, `new`. Platform enum (Apple device platforms, ios charts only): `phone`, `pad`, `mac`. Sort enum: `rank`, `rank_desc`, `date_desc`.
Response notes
- With no `date` (and no single-app history request) the latest snapshot is resolved automatically, so the default response is today's chart in rank order. - The response echoes the resolved `snapshot_date` so callers know which day was returned. - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Invalid enum values return the standard invalid params envelope. - A not-yet-populated index returns an empty `items` list rather than an error. - iOS chart entries carry a `platform` field (see platform enum above); Android entries leave it empty. - Android chart snapshots include the overall Google Play app charts and selected category charts, including the `GAME` and `FAMILY` app categories. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "apps-charts", "items": [ { "chart_uid": "android:GROSSING::jp:2026-06-19:1", "store": "android", "collection": "GROSSING", "chart_type": "top_grossing", "country": "jp", "snapshot_date": "2026-06-19", "rank": 1, "app_id": "com.google.android.apps.subscriptions.red", "title": "Google One", "developer": "Google LLC", "free": true, "url": "https://play.google.com/store/apps/details?id=com.google.android.apps.subscriptions.red" } ], "snapshot_date": "2026-06-19", "page": 1, "page_size": 20, "total": 100, "sort": "rank" } } ```
MCP tool datasets_apps_charts_search
/datasets/apps-reviews/searchSearches user reviews scraped from the iOS App Store and Google Play, stored in a search index (one document per review). Store enum: `ios`, `android`. Sort enum: `recent`, `score_desc`, `score_asc`, `helpful_desc`.
Response notes
- The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Invalid enum values return the standard invalid params envelope. - A not-yet-populated index returns an empty `items` list rather than an error. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "apps-reviews", "items": [ { "review_uid": "ios:284882215:us:7299100412", "store": "ios", "app_id": "284882215", "country": "us", "review_id": "7299100412", "user_name": "jane_doe", "score": 5, "title": "Love it", "text": "Works flawlessly after the latest update.", "version": "451.0", "thumbs_up": 12, "reviewed_at": "2026-06-18T09:21:00Z", "last_crawled": "2026-06-19T02:40:00Z" } ], "page": 1, "page_size": 20, "total": 1, "sort": "recent" } } ```
MCP tool datasets_apps_reviews_search
/datasets/apps/searchSearches resolved iOS App Store and Google Play apps stored in a search index. Store enum: `ios`, `android`, `both`. Platform enum (Apple device platforms, ios records only): `phone`, `pad`, `mac`, `tv`, `watch`, `vision`. Sort enum: `relevance`, `rating_desc`, `reviews_desc`, `installs_desc`, `updated_at_desc`, `popularity_desc`.
Response notes
- Defaults to `relevance` sort when `q` is supplied. - Defaults to `reviews_desc` sort when no `q` is supplied. - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Invalid enum values return the standard invalid params envelope. - A not-yet-populated index returns an empty `items` list rather than an error. - iOS records do not include install counts; `android_max_installs` is populated for Google Play records only. - `platforms` is populated as data is crawled: iOS records use Apple's `phone`/`pad`/`mac`/`tv`/`watch`/`vision` compatibility values; Android records use Google Play source values such as `phone`, `tablet`, `tv`, `chromebook`, `watch`, `xr`, `car`, and `windows` where public source lists identify them. Absent/empty `platforms` means "not yet classified", not platform-incompatible. - Does not trigger live scraping. - Google Play records are Android app records. Google Play Books and Movies are separate store verticals and are not part of this apps dataset. - Recurring ingestion uses public source pages: App Store RSS ranking/new lists and Google Play app category ranking/new lists, plus sitemap and focused refresh lanes. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "apps", "items": [ { "app_uid": "ios:6448311069", "store": "ios", "ios_app_id": "6448311069", "title": "ChatGPT", "developer": "OpenAI", "category": "Productivity", "country": "us", "free": true, "score": 4.9, "ratings_count": 7976038, "url": "https://apps.apple.com/us/app/id6448311069" } ], "page": 1, "page_size": 20, "total": 1, "sort": "reviews_desc" } } ```
MCP tool datasets_apps_search
/datasets/bbb-businesses/facetsReturns distribution counts over the BBB businesses index (dataset id enum value `bbb-businesses`), honoring the same filters as search. Facet enum: `category`, `state`, `city`, `rating`, `accredited`, `entity_type`, `run_id`.
Response notes
- `facet=category` returns the category values to use as the `category` search/facet filter, with counts. - `facet=rating` is useful to see the letter-grade distribution across the currently-filtered slice of the dataset. - Returns an empty `items` array (not an error) when the dataset has no data yet. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "bbb-businesses", "facet": "rating", "items": [ { "value": "A+", "count": 512 }, { "value": "A", "count": 210 }, { "value": "A-", "count": 88 }, { "value": "B+", "count": 34 } ] } } ```
MCP tool datasets_bbb_businesses_facets
/datasets/bbb-businesses/items/{id}Returns one business by id from dataset id enum value `bbb-businesses`. Returns 404 when the business is not in the index.
Response notes
- Returns `404` when the business is not in the index. - Field shape matches one item from the search response. Example response: ```json { "code": 200, "msg": "OK", "data": { "business_id": "0825-1000223803", "bbb_local_id": "0825", "name": "Calixto Plumbing", "url": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803", "country": "us", "state": "tx", "city": "austin", "address": "PO Box 40698, Austin, TX 78704-0012", "phone": "(512) 945-3143", "rating": "A+", "rating_rank": 12, "rating_reasons": ["Customer Reviews are not used in the calculation of the BBB Letter Grade Rating."], "accredited": true, "category": "Plumber", "categories": ["Plumber", "Plumbing Renovation", "Commercial Plumber"], "complaints_url": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803/complaints", "reviews_url": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803/customer-reviews" } } ```
MCP tool datasets_bbb_businesses_item
/datasets/bbb-businesses/searchSearches the BBB (Better Business Bureau) businesses index (dataset id enum value `bbb-businesses`) — business profiles crawled from bbb.org's own search/category-browse pages: computed A+-F letter-grade rating, paid-accreditation status, category, contact info, business details, operating hours, and products/services. Complaints, full reviews, and the full "reasons for rating"/service-area detail are NOT embedded here; each record instead carries complaints_url/reviews_url/more_info_url pointing at the live bbb-business-complaints/bbb-business-reviews/bbb-business-more-info endpoints for on-demand lookup. rating enum: `A+`, `A`, `A-`, `B+`, `B`, `B-`, `C+`, `C`, `C-`, `D+`, `D`, `D-`, `F`. sort enum: `relevance`, `rating_desc`, `rating_asc`, `accredited_first`, `name_asc`, `years_in_business_desc`.
Response notes
- Each item carries `business_id`, `bbb_local_id`, `name`, `url`, `country`, `state`, `city`, `address`, `phone`, `website`, `rating`, `rating_rank`, `rating_reasons`, `accredited`, `accredited_since`, `years_in_business`, `category`, `categories`, business-detail fields (`bbb_file_opened`, `business_started`, `business_incorporated`, `entity_type`, `alternate_names`, `business_management`, `additional_phone_numbers`, `additional_websites`, `social_media`, `licensing_note`, `hours`, `products_and_services`), and the on-demand pointer fields `complaints_url`, `reviews_url`, `more_info_url`. - `rating_reasons` on this record is the shallow rating-card list bbb-business itself returns — often a single generic boilerplate bullet. Fetch `more_info_url` for the fuller per-factor reasons on a lower-rated business. - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Invalid enum values return the standard invalid params envelope. - Returns an empty `items` array (not an error) when nothing matches or the dataset has no data yet. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "bbb-businesses", "items": [ { "business_id": "0825-1000223803", "bbb_local_id": "0825", "name": "Calixto Plumbing", "url": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803", "country": "us", "state": "tx", "city": "austin", "phone": "(512) 945-3143", "rating": "A+", "rating_rank": 12, "accredited": true, "category": "Plumber", "categories": ["Plumber", "Plumbing Renovation", "Commercial Plumber"], "complaints_url": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803/complaints", "reviews_url": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803/customer-reviews" } ], "page": 1, "page_size": 20, "total": 1, "sort": "accredited_first" } } ```
MCP tool datasets_bbb_businesses_search
/datasets/boxofficemojo/facetsReturns terms-aggregation counts for one facet of the Box Office Mojo dataset, scoped to the same filters as search. Facet enum: `gross_band`, `years_active`, `lifetime_year`, `franchise_names`, `brand_names`, `genre_names`, `hydrated`, `is_billion_dollar`, `in_lifetime_top_1000_ww`. gross_band enum: `under_50m`, `50_100m`, `100_250m`, `250_500m`, `500m_1b`, `over_1b`.
MCP tool datasets_boxofficemojo_facets
/datasets/boxofficemojo/items/{title_id}Returns one Box Office Mojo dataset record by title id (IMDb `tt…` id used on Box Office Mojo title pages), including lifetime grosses, year history, release groups and market grosses when hydrated.
Response notes
invalid-params error. Gross amounts are whole USD dollars (no cents). Example response: ```json { "code": 200, "msg": "OK", "data": { "title_id": "tt0499549", "title": "Avatar", "lifetime_gross_worldwide": 2923710708, "lifetime_rank_worldwide": 1, "gross_band": "over_1b", "is_billion_dollar": true, "hydrated": true, "release_group_count": 6, "year_grosses": [{ "year": 2009, "worldwide": 2743577587 }] } } ```
MCP tool datasets_boxofficemojo_item
/datasets/boxofficemojo/searchSearches theatrical box-office records from public Box Office Mojo charts and title pages, stored in a search index. Filter by title id, year, franchise/brand/genre, gross band, lifetime top-1000 membership, hydration status, and worldwide/domestic gross ranges. Sort enum: `relevance`, `worldwide_desc`, `domestic_desc`, `peak_worldwide_desc`, `lifetime_rank_asc`, `year_desc`, `year_asc`. gross_band enum: `under_50m`, `50_100m`, `100_250m`, `250_500m`, `500m_1b`, `over_1b`.
MCP tool datasets_boxofficemojo_search
/datasets/chrome-extensions/changesReturns recent change observations. Change type enum: `users`, `rating`, `rating_count`, `version`, `developer`, `permissions`, `privacy`, `status`.
MCP tool datasets_chrome_extensions_changes
/datasets/chrome-extensions/facetsReturns aggregation buckets. Facet enum: `item_type`, `category`, `developer`, `developer_email`, `manifest_version`, `permission`, `status`, `collects_data`, `has_broad_host_access`. Item type enum: `extension`, `theme`, `app`, `unknown`. Search sort, status and manifest-version enums match the search endpoint.
MCP tool datasets_chrome_extensions_facets
/datasets/chrome-extensions/history/{id}Returns chronological change-only observations for a Chrome Web Store item.
MCP tool datasets_chrome_extensions_history
/datasets/chrome-extensions/items/{id}Returns one stored extension, theme or legacy app snapshot by its 32-character Chrome Web Store id.
MCP tool datasets_chrome_extensions_item
/datasets/chrome-extensions/metricsReturns chart-ready coverage, adoption, rating, permission, privacy and recent-change aggregates for the stored Chrome Web Store dataset. Days enum: `7`, `30`, `90`.
Response notes
- `summary` reports current totals, developer-name and developer-email coverage, and the most recent crawl timestamp. - `item_types`, `manifest_versions`, `user_bands`, `rating_bands`, `review_bands`, and `risk_signals` are complete chart series. - `top_categories` and `top_developers` include item counts and summed displayed users; `top_permissions` counts declared permissions across items. - `changes.daily` fills empty calendar days within the selected window, while `changes.types` counts the change categories observed. - A not-yet-populated index returns zero totals and empty bucket arrays rather than an error. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "chrome-extensions", "generated_at": "2026-07-14T08:00:00Z", "days": 30, "summary": { "total": 966, "total_users": 10232794, "total_ratings": 36524, "average_rating": 4.4341, "privacy_policies": 440, "named_developers": 774, "developer_emails": 104 }, "item_types": [ { "value": "extension", "count": 693 }, { "value": "theme", "count": 238 } ], "risk_signals": [ { "value": "Broad host access", "count": 146 }, { "value": "Collects data", "count": 198 } ], "top_categories": [ { "value": "productivity/tools", "count": 256, "users": 1200000 } ], "top_developers": [ { "value": "Example Publisher", "count": 12, "users": 250000 } ], "changes": { "total": 1, "types": [{ "value": "status", "count": 1 }], "daily": [{ "date": "2026-07-14", "count": 1, "users_delta": 0, "rating_count_delta": 0 }] } } } ```
MCP tool datasets_chrome_extensions_metrics
/datasets/chrome-extensions/searchSearches stored Chrome Web Store item snapshots. Item type enum: `extension`, `theme`, `app`, `unknown`. Sort enum: `relevance`, `users_desc`, `rating_desc`, `reviews_desc`, `updated_desc`, `trending_desc`. Status enum: `active`, `removed`. Manifest version enum: `2`, `3`.
MCP tool datasets_chrome_extensions_search
/datasets/chrome-extensions/trendingReturns stored Chrome Web Store items ranked by the latest observed user and rating-count movement. Filters match the search endpoint; sort is fixed to `trending_desc`.
MCP tool datasets_chrome_extensions_trending
/datasets/creators/searchSearches TikTok creators stored in a search index (one document per creator), with follower counts, verified status, niche, and engagement. Deleted and private accounts are excluded by default; set `include_inactive=true` to include them for historical lookups. Sort enum: `followers_desc`, `engagement_desc`, `likes_desc`, `relevance`. Coverage note: `followers_desc`, `likes_desc`, and `relevance` are backed by profile fields present across the full dataset; the post-level engagement metrics (`engagement_rate`, `avg_views`, and the nested `post_stats` object) and the `engagement_desc` sort are currently populated for a growing subset of creators, prioritizing the highest-reach accounts. Creators without these metrics are still returned but sort last under `engagement_desc` and omit those fields.
Response notes
- The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Invalid enum values return the standard invalid params envelope. - A not-yet-populated index returns an empty `items` list rather than an error. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "creators", "items": [ { "creator_uid": "tiktok:@bubble", "platform": "tiktok", "sec_uid": "MS4wLjABAAAAxxxxxxxx", "unique_id": "bubble", "nickname": "Bubble Skincare", "bio": "Built with dermatologists since day 1.", "bio_link": "https://hellobubble.com", "niche": "skincare", "country": "us", "verified": true, "follower_count": 4100000, "following_count": 312, "total_likes": 25246297, "video_count": 1840, "first_seen": "2026-06-20T05:00:00Z", "last_crawled": "2026-06-20T05:00:00Z" } ], "page": 1, "page_size": 20, "total": 1, "sort": "followers_desc" } } ```
MCP tool datasets_creators_search
/datasets/facebook-pages/facetsReturns terms aggregation counts for the Facebook Pages dataset. Facet enum: `category`, `discovery_source`.
Response notes
- `facet` parameter must be one of the documented enum values; invalid values return `400`. - Aggregates document counts up to top `50` buckets. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "facebook-pages", "facet": "category", "items": [ { "value": "Shoe Store", "count": 42 }, { "value": "Restaurant", "count": 37 }, { "value": "Clothing (Brand)", "count": 29 } ] } } ```
MCP tool datasets_facebook_pages_facets
/datasets/facebook-pages/items/{page_id}Returns one Facebook Page record by page id from dataset id enum value `facebook-pages`.
Response notes
- Returns `404` when the Page is not present in the dataset. Example response: ```json { "code": 200, "msg": "OK", "data": { "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" } } ```
MCP tool datasets_facebook_pages_item
/datasets/facebook-pages/searchSearches 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`.
Response notes
- Defaults to `relevance` sort when `q` is supplied, otherwise `likes_desc`. - `min_likes` must not exceed `max_likes`. - Date filters accept an RFC3339 timestamp or a bare `YYYY-MM-DD` calendar date. - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Only successfully hydrated Pages are ever returned. - Does not trigger live scraping. Example response: ```json { "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" } } ```
MCP tool datasets_facebook_pages_search
/datasets/github-users/facetsReturns terms aggregation counts for the GitHub users dataset. Facet enum: `influence_tier`, `type`, `country`, `country_code`, `state`, `city`, `domains`, `company`, `reachable`, `has_email`, `has_twitter`, `has_blog`, `active_90d`, `hireable`, `is_org`, `is_bot`, `is_suspected_automation`. influence_tier enum: `nano`, `micro`, `mid`, `macro`, `mega`. Suspected-automation records are excluded by default unless is_suspected_automation is set.
Response notes
- Returns up to `50` buckets ordered by descending count. - `facet` is required; unsupported values return the standard invalid params envelope. - Boolean facets (`reachable`, `has_email`, `has_twitter`, `has_blog`, `active_90d`, `hireable`, `is_org`, `is_bot`, `is_suspected_automation`) return `true`/`false` bucket values. - Suspected-automation records are excluded from all facet counts unless `is_suspected_automation` is set. - Returns an empty `items` array (not an error) when the dataset has no data yet. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "github-users", "facet": "country", "items": [ { "value": "United States", "count": 4210 }, { "value": "Germany", "count": 1875 }, { "value": "India", "count": 1610 } ] } } ```
MCP tool datasets_github_users_facets
/datasets/github-users/items/{login}Returns one enriched GitHub user record by login from dataset id enum value `github-users`.
Response notes
- Returns `404` when the login is not present in the stored dataset. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "login": "octodev", "name": "Octo Dev", "company_normalized": "google", "blog": "https://octo.dev", "twitter_username": "octodev", "influence_tier": "mid", "geo": { "country": "Germany", "country_code": "DE", "city": "Berlin" }, "followers": 1200, "public_repos": 60, "account_age_years": 10.0, "reachable": true, "domains": ["ml-ai"], "rank_score": 88 } } ```
MCP tool datasets_github_users_item
/datasets/github-users/nearbySearches enriched GitHub users near a coordinate, sorted by distance, in dataset id enum value `github-users`. influence_tier enum: `nano`, `micro`, `mid`, `macro`, `mega`.
Response notes
- Results are sorted by ascending distance; each item carries `distance_m` (meters from the query point). - `lat`, `lon` and `radius_m` are all required. - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Only users with a geocoded location are returned. - Returns an empty `items` array (not an error) when no users fall within the radius. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "github-users", "items": [ { "login": "octodev", "name": "Octo Dev", "influence_tier": "mid", "geo": { "country": "United States", "city": "San Francisco" }, "followers": 1200, "reachable": true, "distance_m": 1840.5 } ], "page": 1, "page_size": 20, "total": 1, "sort": "distance_asc" } } ```
MCP tool datasets_github_users_nearby
/datasets/github-users/searchSearches enriched public GitHub user profiles stored in a search index. influence_tier enum: `nano`, `micro`, `mid`, `macro`, `mega`. Sort enum: `relevance`, `rank_score_desc`, `followers_desc`, `account_age_desc`, `account_age_asc`, `distance_asc`.
Response notes
- Suspected-automation records (commit-farm / mass-repo bots) are excluded unless `is_suspected_automation` is set, so `rank_score` ranking is clean by default. - `rank_score` weights follower-based influence primarily and log-dampens recent activity (pushes/PRs/reviews), so raw push volume cannot dominate the ranking. - Defaults to `relevance` sort when `q` is supplied, otherwise `rank_score_desc`. - `lat` and `lon` must be supplied together. `distance_asc` requires `lat` and `lon`, but does not require `radius_m`. - `min_followers` must not exceed `max_followers`. - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Invalid enum values return the standard invalid params envelope. - Returns an empty `items` array (not an error) when the dataset has no matches yet. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "github-users", "items": [ { "login": "octodev", "name": "Octo Dev", "company_normalized": "google", "influence_tier": "mid", "geo": { "country": "Germany", "country_code": "DE", "city": "Berlin" }, "followers": 1200, "reachable": true, "has_email": true, "domains": ["ml-ai"], "rank_score": 88 } ], "page": 1, "page_size": 20, "total": 1, "sort": "rank_score_desc" } } ```
MCP tool datasets_github_users_search
/datasets/goodreads-authors/facetsReturns terms aggregation counts for the Goodreads authors dataset. Facet enum: `genres`, `run_id`.
MCP tool datasets_goodreads_authors_facets
/datasets/goodreads-authors/items/{id}Returns one crawled Goodreads author profile record by id from dataset id enum value `goodreads-authors`.
MCP tool datasets_goodreads_authors_item
/datasets/goodreads-authors/searchSearches the crawled public Goodreads author profile index. Authors are discovered as a byproduct of the books crawl (every credited book contributor, plus the genre/search/list seed sources) — not a full catalog. Sort enum: `relevance`, `rating_desc`, `reviews_desc`, `name_asc`.
MCP tool datasets_goodreads_authors_search
/datasets/goodreads-books/facetsReturns terms aggregation counts for the Goodreads books dataset. Facet enum: `genres`, `format`, `language`, `publisher`, `primary_author`, `primary_author_id`, `series_name`, `publication_year`, `run_id`.
MCP tool datasets_goodreads_books_facets
/datasets/goodreads-books/items/{id}Returns one crawled Goodreads book record by id from dataset id enum value `goodreads-books`.
MCP tool datasets_goodreads_books_item
/datasets/goodreads-books/searchSearches the crawled public Goodreads book catalog stored in a search index. Discovered from curated Listopia "best of" lists, a search-term sweep, and author bibliography expansion — not a full catalog. Sort enum: `relevance`, `rating_desc`, `reviews_desc`, `publication_desc`, `publication_asc`, `pages_desc`, `pages_asc`, `title_asc`.
MCP tool datasets_goodreads_books_search
/datasets/housing-markets/facetsReturns terms aggregation counts for the housing markets dataset. Facet enum: `region_type`, `state_code`, `property_type`, `parent_metro`, `parent_metro_code`, `income_vintage`, `is_latest`, `period_begin`. region_type enum: `national`, `metro`, `county`, `city`, `zip`. property_type enum: `All Residential`, `Single Family Residential`, `Condo/Co-op`, `Townhouse`, `Multi-Family (2-4 Unit)`, `Single Units Only`.
Response notes
- Returns up to `50` buckets ordered by descending count. - `facet` is required; unsupported values return the standard invalid params envelope. - The `is_latest` boolean facet returns `true`/`false` bucket values; `period_begin` buckets are dates. - Combine `latest=true` with the `period_begin` facet to confirm the dataset's current month, or facet `state_code` filtered to `region_type=city` to see per-state city coverage. - Returns an empty `items` array (not an error) when the dataset has no data yet. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "housing-markets", "facet": "property_type", "items": [ { "value": "All Residential", "count": 3712450 }, { "value": "Single Family Residential", "count": 3689121 }, { "value": "Condo/Co-op", "count": 2418804 } ] } } ```
MCP tool datasets_housing_markets_facets
/datasets/housing-markets/items/{region_type}/{table_id}Returns one housing-market record by region_type and Redfin table_id from dataset id enum value `housing-markets`. region_type enum: `national`, `metro`, `county`, `city`, `zip`. property_type enum: `All Residential`, `Single Family Residential`, `Condo/Co-op`, `Townhouse`, `Multi-Family (2-4 Unit)`, `Single Units Only` (defaults to `All Residential`). `period` defaults to the most recent period on record. Pass `history=true` to get the full monthly series (a `{dataset, region_type, table_id, property_type, items}` envelope, sorted by period ascending) instead of a single record.
Response notes
- Without `history`, returns the single record for the requested (or latest) period. - With `history=true`, returns a `{dataset, region_type, table_id, property_type, items}` envelope with every stored month. - Returns `404` when the region/period/property-type combination is not present in the stored dataset. - Returns the standard invalid params envelope for an unknown `region_type`, a non-numeric `table_id`, an invalid `property_type`, or a malformed `period`. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "region_type": "zip", "region_type_id": 2, "table_id": 26097, "region": "Zip Code: 60616", "state": "Illinois", "state_code": "IL", "zip_code": "60616", "parent_metro": "Chicago, IL", "parent_metro_code": "16984", "property_type": "All Residential", "property_type_id": -1, "period_begin": "2026-03-01", "period_end": "2026-05-31", "is_latest": true, "median_sale_price": 340000, "median_sale_price_yoy": 0.062, "median_list_price": 349900, "homes_sold": 94, "inventory": 151, "median_dom": 38, "median_household_income": 91245, "income_geo_id": "860Z200US60616", "income_vintage": "acs2024_5yr", "price_to_income": 3.73, "salary_to_buy": 96581, "affordability_gap": 5336, "mortgage_rate_pct": 6.49, "source": "redfin_data_center", "run_id": "housing-20260711", "schema_version": 1 } } ```
MCP tool datasets_housing_markets_item
/datasets/housing-markets/searchSearches monthly Redfin housing-market statistics per region and property type since 2012, joined to Census ACS income for affordability metrics. region_type enum: `national`, `metro`, `county`, `city`, `zip`. property_type enum: `All Residential`, `Single Family Residential`, `Condo/Co-op`, `Townhouse`, `Multi-Family (2-4 Unit)`, `Single Units Only`. Sort enum: `relevance`, `price_desc`, `price_asc`, `list_price_desc`, `list_price_asc`, `price_to_income_desc`, `price_to_income_asc`, `salary_to_buy_desc`, `salary_to_buy_asc`, `dom_asc`, `dom_desc`, `inventory_desc`, `homes_sold_desc`, `period_desc`. Use `latest=true` for the most recent period per region series.
Response notes
- One record per region x month x property type; `is_latest` marks each series' most recent month — combine `latest=true` with `region_type` for current-market rankings. - MoM/YoY change fields (`median_sale_price_yoy` etc.) are fractions as published by Redfin (`0.05` = +5%). - Affordability fields (`median_household_income`, `price_to_income`, `salary_to_buy`, `affordability_gap`) exist only where the Census income geography matched and a median sale price is present; `salary_to_buy` assumes 20% down, a 30-year fixed mortgage at `mortgage_rate_pct`, 1.5%/yr taxes+insurance, and a 28% payment-to-income ratio. - `income_vintage` is `acs2024_5yr`; ACS incomes lag current prices by ~2 years. - Defaults to `relevance` sort with `q`, `price_to_income_desc` with `latest=true`, otherwise `period_desc`. - Missing metrics are `null`, never `0` — Redfin leaves thin-market cells empty. - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Invalid enum values return the standard invalid params envelope. - Returns an empty `items` array (not an error) when the dataset has no matches yet. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "housing-markets", "items": [ { "region_type": "metro", "region_type_id": -2, "table_id": 41940, "region": "San Jose, CA metro area", "state_code": "CA", "property_type": "All Residential", "property_type_id": -1, "period_begin": "2026-05-01", "period_end": "2026-05-31", "is_latest": true, "median_sale_price": 1650000, "median_sale_price_yoy": 0.041, "median_list_price": 1498000, "homes_sold": 812, "inventory": 1421, "median_dom": 12, "median_household_income": 153202, "income_geo_id": "0400000US06", "income_vintage": "acs2024_5yr", "price_to_income": 10.77, "salary_to_buy": 322403, "affordability_gap": 169201, "mortgage_rate_pct": 6.49, "source": "redfin_data_center", "run_id": "housing-20260711", "schema_version": 1 } ], "page": 1, "page_size": 20, "total": 934, "sort": "price_to_income_desc" } } ```
MCP tool datasets_housing_markets_search
/datasets/instagram-users/facetsReturns terms aggregation counts for the Instagram users dataset. Facet enum: `is_verified`, `is_business_account`, `has_bio`, `has_external_url`, `category_name`, `source_tier`.
Response notes
- `facet` parameter must be one of the documented enum values; invalid values return `400`. - Aggregates document counts up to top `50` buckets. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "instagram-users", "facet": "category_name", "items": [ { "value": "Digital Creator", "count": 450000 }, { "value": "Artist", "count": 280000 }, { "value": "Entrepreneur", "count": 195000 } ] } } ```
MCP tool datasets_instagram_users_facets
/datasets/instagram-users/items/{username}Returns one Instagram user record by username from dataset id enum value `instagram-users`.
Response notes
- Leading `@` is automatically trimmed. - Usernames match case-insensitively. - Returns `404` when the user record is not present in the dataset. Example response: ```json { "code": 200, "msg": "OK", "data": { "username": "instagram", "id": "25025320", "full_name": "Instagram", "biography": "Discovering creators and stories around the world.", "external_url": "https://about.instagram.com", "avatar_url": "https://scontent.cdninstagram.com/avatar.jpg", "is_verified": true, "is_business_account": true, "category_name": "Product/Service", "has_bio": true, "has_external_url": true, "followers": 670000000, "following": 80, "posts": 7500, "follower_following_ratio": 8375000.0, "source_tier": "head-directory", "crawled_at": "2026-07-23T10:00:00Z", "schema_version": 1 } } ```
MCP tool datasets_instagram_users_item
/datasets/instagram-users/searchSearches public Instagram user profiles stored in a search index. Sort enum: `relevance`, `followers_desc`, `followers_asc`, `crawled_at_desc`, `crawled_at_asc`, `created_at_desc`, `created_at_asc`.
Response notes
- Defaults to `relevance` sort when `q` is supplied, otherwise `followers_desc`. - `min_followers` must not exceed `max_followers`, and `min_ratio` must not exceed `max_ratio`. - Date filters accept an RFC3339 timestamp or a bare `YYYY-MM-DD` calendar date. - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Invalid enum values return the standard invalid params envelope. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "instagram-users", "items": [ { "username": "instagram", "id": "25025320", "full_name": "Instagram", "biography": "Discovering creators and stories around the world.", "external_url": "https://about.instagram.com", "avatar_url": "https://scontent.cdninstagram.com/avatar.jpg", "is_verified": true, "is_business_account": true, "category_name": "Product/Service", "has_bio": true, "has_external_url": true, "followers": 670000000, "following": 80, "posts": 7500, "follower_following_ratio": 8375000.0, "source_tier": "head-directory", "crawled_at": "2026-07-23T10:00:00Z", "schema_version": 1 } ], "page": 1, "page_size": 20, "total": 1, "sort": "followers_desc" } } ```
MCP tool datasets_instagram_users_search
/datasets/jobs/companiesSearches the discovered company board registry — which companies are hiring, on which ATS (or, for the 5 single-company big-tech providers, which platform), with how many open roles. Set sponsors_visa=true to keep companies with certified employer filings in recent public U.S. Department of Labor LCA disclosure data. This is company-level historical evidence, not a guarantee for a specific role or candidate. provider enum: `greenhouse`, `lever`, `ashby`, `workday`, `smartrecruiters`, `workable`, `recruitee`, `rippling`, `personio`, `teamtailor`, `oracle`, `ukg`, `icims`, `eightfold`, `gem`, `pinpoint`, `amazon-jobs`, `apple-jobs`, `google-jobs`, `meta-jobs`, `tesla-jobs`. status enum: `active`, `empty`, `gone`, `blocked`, `pending`, `invalid`. sort enum: `open_desc`, `company_asc`, `crawled_desc`.
MCP tool datasets_jobs_companies
/datasets/jobs/companies/{id}Returns one discovered company board by its dataset board id. When the company name matches recent public U.S. Department of Labor LCA disclosure data, the response includes `lca_sponsorship` with filing counts and observed fiscal-quarter range; this is company-level historical evidence, not a guarantee for a specific role or candidate. When the board carries a known domain, the response also includes a `tech_stack` firmographic hint. Returns 404 when the board id is not in the registry.
MCP tool datasets_jobs_company_item
/datasets/jobs/facetsAggregations over all open postings: top companies hiring, breakdown by provider (every provider filterable via /datasets/jobs/search's `provider` param), department, location, employment type, skill, benefit, education, security clearance, seniority, and ESCO/ISCO job family, plus the remote share — a live hiring-market snapshot. Seniority uses one mutually exclusive value: `entry`, `mid`, or `senior`; ambiguous occupations are omitted from job-family buckets.
MCP tool datasets_jobs_facets
/datasets/jobs/items/{id}Returns one crawled job posting by its dataset posting id. Returns 404 when absent.
MCP tool datasets_jobs_item
/datasets/jobs/nearbyFinds crawled job postings within `radius_km` of a `lat`/`lon`, nearest first. Only geocoded postings participate (the geo-enrich worker back-fills coordinates from each posting's location). Open roles only by default. provider enum: `greenhouse`, `lever`, `ashby`, `workday`, `smartrecruiters`, `workable`, `recruitee`, `rippling`, `personio`, `teamtailor`, `oracle`, `ukg`, `icims`, `eightfold`, `gem`, `pinpoint`, `amazon-jobs`, `apple-jobs`, `google-jobs`, `meta-jobs`, `tesla-jobs`.
MCP tool datasets_jobs_nearby
/datasets/jobs/searchFull-text + faceted search over every job posting crawled from every discovered company ATS board (Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable, Recruitee, Rippling, Personio, Teamtailor, Oracle, UKG, iCIMS, Eightfold, Gem, Pinpoint) plus 5 single-company big-tech careers platforms (Amazon, Apple, Google, Meta, Tesla). Open roles only by default (set include_closed=true for historical/filled roles). Salary is parsed from a structured field when the provider has one, or from an explicit pay figure stated in the description otherwise, so coverage varies by posting rather than by provider; min_salary/max_salary filter on it and require salary_currency, since comparing raw compensation numbers across currencies is meaningless. Location is also exposed as structured city/state/country fields alongside the free-text location string, so city/state/country filter on an exact match of those parsed components rather than substring-matching the display string. job_family is an exact level-2 ISCO family label assigned from ESCO occupation evidence; ambiguous postings remain unclassified and do not match that filter. employment_type is never populated for google-jobs/meta-jobs, and posted_at (so sort=posted_desc) is never populated for meta-jobs/tesla-jobs -- their upstream APIs expose no such field. provider enum: `greenhouse`, `lever`, `ashby`, `workday`, `smartrecruiters`, `workable`, `recruitee`, `rippling`, `personio`, `teamtailor`, `oracle`, `ukg`, `icims`, `eightfold`, `gem`, `pinpoint`, `amazon-jobs`, `apple-jobs`, `google-jobs`, `meta-jobs`, `tesla-jobs`. workplace_type enum: `onsite`, `hybrid`, `remote`. sort enum: `relevance`, `posted_desc`, `company_asc`.
MCP tool datasets_jobs_search
/datasets/journalists/facetsReturns distribution counts over the journalists index (dataset id enum value `journalists`), honoring the same filters as search. Facet enum: `outlet`, `vertical`, `topic`, `contact_type`.
Response notes
- `facet=outlet` returns the outlet ids to use as the `outlet` search/item filter, with counts. - `facet=contact_type` is useful to gauge how much of the roster has a real email vs. only a social handle vs. nothing. - Returns an empty `items` array (not an error) when the dataset has no data yet. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "journalists", "facet": "contact_type", "items": [ { "value": "email", "count": 42 }, { "value": "social", "count": 61 }, { "value": "none", "count": 8 } ] } } ```
MCP tool datasets_journalists_facets
/datasets/journalists/items/{outlet}/{slug}Returns one journalist by outlet id and slug from dataset id enum value `journalists`. Returns 404 when the outlet is not supported or the journalist is not in the index.
Response notes
- Returns `404` when the outlet is not a supported outlet, or the journalist is not in the index. - Field shape matches one item from the search response. Example response: ```json { "code": 200, "msg": "OK", "data": { "outlet_id": "techcrunch", "outlet": "TechCrunch", "outlet_domain": "techcrunch.com", "vertical": "tech", "slug": "zack-whittaker", "name": "Zack Whittaker", "title": "Security Editor", "bio": "Zack Whittaker is the security editor at TechCrunch...", "topics": ["security"], "profile_url": "https://techcrunch.com/author/zack-whittaker/", "contact_email": "zack.whittaker@techcrunch.com", "social_links": { "signal": "zackwhittaker.1337", "bluesky": "https://bsky.app/profile/zackwhittaker.com" }, "contact_type": "email" } } ```
MCP tool datasets_journalists_item
/datasets/journalists/searchSearches the journalists index (dataset id enum value `journalists`) — public journalist and reporter contact records crawled from news outlets' own staff/author pages, for PR outreach. Each record carries the outlet, title, best-effort beat topics, and any public contact info (a work email or a social handle) found on that outlet's own page. There is no cross-outlet upstream search; this dataset is built by crawling a curated roster of outlets ourselves. vertical enum: `tech`, `crypto`, `marketing`, `consumer_tech`, `consumer_policy`, `cybersecurity`, `health`, `gaming`, `climate`, `business`, `entertainment`, `sports`, `legal`, `science`, `politics`, `real_estate`, `automotive`, `travel`, `food`, `education`, `design`, `film_tv`, `fashion`, `music`, `personal_finance`, `tech_independent`, `culture_independent`, `local_news`, `construction`, `banking`, `retail`, `aerospace_defense`, `energy`, `agriculture`, `local_business`. contact_type enum: `email`, `social`, `none`. sort enum: `relevance`, `name_asc`, `outlet_asc`, `crawled_desc`.
Response notes
- Each item carries `outlet_id`, `outlet`, `outlet_domain`, `vertical`, `slug`, `name`, `title`, `bio`, `topics`, `profile_url`, `contact_email`, `social_links`, and `contact_type`. - `contact_type` is the most useful outreach filter: `email` means a real work email was found on the outlet's own page, `social` means only a social handle (X, LinkedIn, Bluesky, Signal, etc.) was found, `none` means neither. - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Invalid enum values return the standard invalid params envelope. - Returns an empty `items` array (not an error) when nothing matches or the dataset has no data yet. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "journalists", "items": [ { "outlet_id": "techcrunch", "outlet": "TechCrunch", "outlet_domain": "techcrunch.com", "vertical": "tech", "slug": "zack-whittaker", "name": "Zack Whittaker", "title": "Security Editor", "bio": "Zack Whittaker is the security editor at TechCrunch...", "topics": ["security"], "profile_url": "https://techcrunch.com/author/zack-whittaker/", "contact_email": "zack.whittaker@techcrunch.com", "social_links": { "signal": "zackwhittaker.1337", "bluesky": "https://bsky.app/profile/zackwhittaker.com" }, "contact_type": "email" } ], "page": 1, "page_size": 20, "total": 1, "sort": "outlet_asc" } } ```
MCP tool datasets_journalists_search
/datasets/numbeo-cities/facetsReturns terms aggregation counts for the Numbeo cities dataset. Facet enum: `country`.
MCP tool datasets_numbeo_cities_facets
/datasets/numbeo-cities/items/{slug}Returns one composite Numbeo city record by city slug from dataset id enum value `numbeo-cities`.
MCP tool datasets_numbeo_cities_item
/datasets/numbeo-cities/searchSearches the composite Numbeo cities dataset, merged from the current global rankings of all seven index families (cost of living, quality of life, crime, health care, pollution, traffic, property investment). A city appears once it is ranked by at least one family; coverage varies per city. Sort enum: `name_asc`, `cost_of_living_asc`, `cost_of_living_desc`, `quality_of_life_desc`, `safety_desc`, `crime_asc`, `health_care_desc`, `pollution_asc`, `traffic_asc`.
MCP tool datasets_numbeo_cities_search
/datasets/numbeo-countries/items/{country}Returns one composite Numbeo country record by country name from dataset id enum value `numbeo-countries`.
MCP tool datasets_numbeo_countries_item
/datasets/numbeo-countries/searchSearches the composite Numbeo countries dataset, merged from the current global by-country rankings of all seven index families. Sort enum: `name_asc`, `cost_of_living_asc`, `cost_of_living_desc`, `quality_of_life_desc`, `safety_desc`, `crime_asc`, `health_care_desc`, `pollution_asc`, `traffic_asc`.
MCP tool datasets_numbeo_countries_search
/datasets/pitchbook-advisors/facetsReturns terms aggregation counts for the PitchBook advisors dataset. Facet enum: `service_type`, `hq_country`, `hq_state`, `run_id`.
MCP tool datasets_pitchbook_advisors_facets
/datasets/pitchbook-advisors/items/{id}Returns one crawled PitchBook advisor record by id from dataset id enum value `pitchbook-advisors`.
MCP tool datasets_pitchbook_advisors_item
/datasets/pitchbook-advisors/searchSearches the crawled public PitchBook advisor (service provider — e.g. investment bank, lender, financing advisory firm) profile catalog stored in a search index. Discovered from PitchBook's public sitemap. Sort enum: `relevance`, `name_asc`, `year_founded_desc`, `recently_crawled_desc`.
MCP tool datasets_pitchbook_advisors_search
/datasets/pitchbook-companies/facetsReturns terms aggregation counts for the PitchBook companies dataset. Facet enum: `status`, `primary_industry`, `financing_status`, `ownership_status`, `hq_country`, `hq_state`, `run_id`.
MCP tool datasets_pitchbook_companies_facets
/datasets/pitchbook-companies/items/{id}Returns one crawled PitchBook company record by id from dataset id enum value `pitchbook-companies`.
MCP tool datasets_pitchbook_companies_item
/datasets/pitchbook-companies/searchSearches the crawled public PitchBook company profile catalog stored in a search index. Discovered from PitchBook's public sitemap. Sort enum: `relevance`, `name_asc`, `year_founded_desc`, `investor_count_desc`, `recently_crawled_desc`.
MCP tool datasets_pitchbook_companies_search
/datasets/pitchbook-funds/facetsReturns terms aggregation counts for the PitchBook funds dataset. Facet enum: `fund_strategy`, `fund_status`, `run_id`.
MCP tool datasets_pitchbook_funds_facets
/datasets/pitchbook-funds/items/{id}Returns one crawled PitchBook fund record by id from dataset id enum value `pitchbook-funds`.
MCP tool datasets_pitchbook_funds_item
/datasets/pitchbook-funds/searchSearches the crawled public PitchBook fund profile catalog stored in a search index. Discovered from PitchBook's public sitemap. Sort enum: `relevance`, `name_asc`, `vintage_desc`, `recently_crawled_desc`.
MCP tool datasets_pitchbook_funds_search
/datasets/pitchbook-investors/facetsReturns terms aggregation counts for the PitchBook investors dataset. Facet enum: `status`, `investor_type`, `hq_country`, `hq_state`, `run_id`.
MCP tool datasets_pitchbook_investors_facets
/datasets/pitchbook-investors/items/{id}Returns one crawled PitchBook investor record by id from dataset id enum value `pitchbook-investors`.
MCP tool datasets_pitchbook_investors_item
/datasets/pitchbook-investors/searchSearches the crawled public PitchBook investor (fund manager/firm) profile catalog stored in a search index. Discovered from PitchBook's public sitemap. Sort enum: `relevance`, `name_asc`, `portfolio_count_desc`, `recently_crawled_desc`.
MCP tool datasets_pitchbook_investors_search
/datasets/pitchbook-limited-partners/facetsReturns terms aggregation counts for the PitchBook limited partners dataset. Facet enum: `institution_type`, `hq_country`, `hq_state`, `run_id`.
MCP tool datasets_pitchbook_limited_partners_facets
/datasets/pitchbook-limited-partners/items/{id}Returns one crawled PitchBook limited partner record by id from dataset id enum value `pitchbook-limited-partners`.
Response notes
- Some limited partner profiles have no FAQ section (`faqs` is an empty list) — PitchBook only generates one for profiles with enough content. This is normal, not a sign of a blocked or broken crawl; the example below is one such profile. Example response: ```json {"code":200,"msg":"OK","data":{"id":"186091-66","kind":"limited-partner","name":"Sippdeal Trustees","description":"Sippdeal Trustees is a private investment firm based in Manchester, United Kingdom. The firm was established in 2000. The assets are managed by the board of directors.","overview":{"Type":"Private Investment Fund","Year Founded":"2000","Professionals":"1","Commitments":"1"},"contact":{"Year Founded":"2000","Institution Type":"Private Investment Fund","Title":"Board Member","Corporate Office":"4 Exchange Quay, Salford Quays, Manchester M5 3EE, England, United Kingdom"},"tables":[{"name":"Commitments","total":1,"columns":["Fund Name","Fund Manager","Fund Location","Vintage","Fund Size","Commitment Date","Commitment"],"rows":[["","Cornerstone Private Equity","London, United Kingdom","2010","","",""]]}],"faqs":[],"institution_type":"Private Investment Fund","year_founded":2000,"contact_title":"Board Member","commitments_count":1,"hq_country":"United Kingdom","hq_state":"England","hq_city":"Manchester M5 3EE","source_url":"https://pitchbook.com/profiles/limited-partner/186091-66","crawled_at":"2026-07-20T20:00:00Z"}} ```
MCP tool datasets_pitchbook_limited_partners_item
/datasets/pitchbook-limited-partners/searchSearches the crawled public PitchBook limited partner (institutional investor — e.g. pension fund, endowment, insurance company) profile catalog stored in a search index. Discovered from PitchBook's public sitemap. Some limited partner profiles have no FAQ section -- this is normal, not a sign of missing data. Sort enum: `relevance`, `name_asc`, `year_founded_desc`, `recently_crawled_desc`.
MCP tool datasets_pitchbook_limited_partners_search
/datasets/playstation-games/facetsReturns terms aggregation counts for the PlayStation games dataset. Facet enum: `publisher`, `classification`, `genres`, `platforms`, `content_rating_authority`, `content_descriptors`, `price_tier`, `service_branding`, `region`, `release_year`, `run_id`, `is_free`, `is_addon`, `is_tied_to_subscription`, `coming_soon`. price_tier enum: `free`, `under_5`, `5_to_10`, `10_to_20`, `20_to_40`, `40_to_60`, `60_plus`.
MCP tool datasets_playstation_games_facets
/datasets/playstation-games/items/{product_id}Returns one crawled PlayStation Store record by product_id from dataset id enum value `playstation-games`.
MCP tool datasets_playstation_games_item
/datasets/playstation-games/searchSearches the crawled public PlayStation Store catalog stored in a search index. One row per product SKU (game, edition or add-on); concept_id / np_title_id group a title's SKUs. price_tier enum: `free`, `under_5`, `5_to_10`, `10_to_20`, `20_to_40`, `40_to_60`, `60_plus`. Sort enum: `relevance`, `rating_desc`, `reviews_desc`, `price_asc`, `price_desc`, `discount_desc`, `release_desc`, `release_asc`.
MCP tool datasets_playstation_games_search
/datasets/producthunt-makers/facetsReturns distribution counts over the Product Hunt makers dataset (dataset id enum value `producthunt-makers`), honoring the same filters as search. Facet enum: `topic`, `product_count_band`.
Response notes
- Each item is a `{ value, count }` bucket. For `facet=topic`, `value` is a topic slug; for `facet=product_count_band`, one of `1`, `2-4`, `5-9`, `10+`. - Invalid enum values return the standard invalid params envelope. - Returns an empty `items` array (not an error) when nothing matches or the dataset has no data yet. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "producthunt-makers", "facet": "product_count_band", "items": [ { "value": "1", "count": 180234 }, { "value": "2-4", "count": 42150 }, { "value": "5-9", "count": 8300 }, { "value": "10+", "count": 2100 } ] } } ```
MCP tool datasets_producthunt_makers_facets
/datasets/producthunt-makers/items/{username}Returns one maker by Product Hunt username from dataset id enum value `producthunt-makers`, including the products they made and their aggregate footprint. Returns 404 when the username is not in the dataset.
Response notes
- Returns the full maker record (`maker_id`, `username`, `name`, `headline`, `avatar_url`, `followers_count`, `made_products`, `product_count`, `total_votes`, `best_product`, `topics`). - Returns `404` when the username is not in the dataset. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "maker_id": "12345", "username": "rrhoover", "name": "Ryan Hoover", "headline": "Founder of Product Hunt", "followers_count": 42000, "product_count": 8, "total_votes": 5210, "best_product": { "slug": "product-hunt", "name": "Product Hunt", "latest_score": 1200 }, "made_products": [ { "product_id": "1", "slug": "product-hunt", "name": "Product Hunt", "latest_score": 1200 } ], "topics": ["tech", "productivity"] } } ```
MCP tool datasets_producthunt_makers_item
/datasets/producthunt-makers/searchSearches Product Hunt makers from the dataset id enum value `producthunt-makers` — public-profile records of the people who made products, with their footprint (products made, total upvotes, topics) for maker leaderboards. Public fields only. Sort enum: `total_votes_desc`, `product_count_desc`, `followers_desc`, `relevance`.
Response notes
- Each item carries `maker_id`, `username`, `name`, `headline`, `avatar_url`, `followers_count`, `made_products`, `product_count`, `total_votes`, `best_product` and `topics`. - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Invalid enum values return the standard invalid params envelope. - Returns an empty `items` array (not an error) when nothing matches or the dataset has no data yet. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "producthunt-makers", "items": [ { "maker_id": "12345", "username": "rrhoover", "name": "Ryan Hoover", "headline": "Founder of Product Hunt", "product_count": 8, "total_votes": 5210, "best_product": { "slug": "product-hunt", "latest_score": 1200 }, "topics": ["tech", "productivity"] } ], "page": 1, "page_size": 20, "total": 1, "sort": "total_votes_desc" } } ```
MCP tool datasets_producthunt_makers_search
/datasets/producthunt-products/facetsReturns distribution counts over the Product Hunt products dataset (dataset id enum value `producthunt-products`), honoring the same filters as search. Facet enum: `topic`, `launch_year`, `pricing_type`, `product_state`.
Response notes
- Each item is a `{ value, count }` bucket. For `facet=topic`, `value` is a topic slug; for `facet=launch_year`, a four-digit year; for `facet=pricing_type`/`product_state`, the token value. - Invalid enum values return the standard invalid params envelope. - Returns an empty `items` array (not an error) when nothing matches or the dataset has no data yet. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "producthunt-products", "facet": "launch_year", "items": [ { "value": "2024", "count": 12043 }, { "value": "2023", "count": 11890 } ] } } ```
MCP tool datasets_producthunt_products_facets
/datasets/producthunt-products/items/{slug}Returns one product by its Product Hunt slug from dataset id enum value `producthunt-products`, including its full launch history and (once hydrated) description, website, twitter_url, pricing and makers. Returns 404 when the slug is not in the archive.
Response notes
- Returns the full product record (`product_id`, `slug`, `name`, `tagline`, `topics`, `latest_score`, best ranks, `launches`, and hydrated `description`/`website`/`twitter_url`/`pricing_type`/`reviews_rating`/`makers`). - Returns `404` when the slug is not in the archive. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "product_id": "94418", "slug": "streaks", "name": "Streaks", "tagline": "The to-do list that helps you form good habits.", "topics": [{ "slug": "ios", "name": "iOS" }], "topic_slugs": ["ios", "task-management", "tech"], "latest_score": 414, "best_daily_rank": 1, "won_daily": true, "first_launch_date": "2015-06-01", "launch_count": 1, "launches": [ { "date": "2015-06-01", "daily_rank": 1, "score": 414, "post_id": "22928" } ] } } ```
MCP tool datasets_producthunt_products_item
/datasets/producthunt-products/searchSearches individual Product Hunt launches from the dataset id enum value `producthunt-products` — the searchable launch archive. Each result is one product with its topics, upvotes, ranks and launch history; description/website/twitter_url/pricing/makers are filled in as hydration runs. Sort enum: `relevance`, `votes_desc`, `launched_desc`, `launched_asc`, `rating_desc`, `best_rank_asc`.
Response notes
- Each item carries `product_id`, `slug`, `name`, `tagline`, `topics`/`topic_slugs`, `latest_score` (upvotes), `best_daily_rank`/`best_weekly_rank`/`best_monthly_rank`, `first_launch_date`, `launches` (launch history), and — once hydrated — `description`, `website`, `twitter_url`, `pricing_type`, `reviews_rating` and `makers`. - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Invalid enum values return the standard invalid params envelope. - Returns an empty `items` array (not an error) when nothing matches or the dataset has no data yet. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "producthunt-products", "items": [ { "product_id": "94418", "slug": "streaks", "name": "Streaks", "tagline": "The to-do list that helps you form good habits.", "topic_slugs": ["ios", "task-management", "tech"], "latest_score": 414, "best_daily_rank": 1, "won_daily": true, "first_launch_date": "2015-06-01", "launch_count": 1 } ], "page": 1, "page_size": 20, "total": 1, "sort": "votes_desc" } } ```
MCP tool datasets_producthunt_products_search
/datasets/producthunt-trends/facetsReturns suppressed distribution counts over the Product Hunt trends dataset (dataset id enum value `producthunt-trends`), honoring the same filters as search. Facet enum: `topic`, `launch_year`.
Response notes
- Each item is a `{ value, count }` bucket. For `facet=topic`, `value` is a topic slug; for `facet=launch_year`, `value` is a four-digit year. - Buckets below the effective suppression floor are omitted. - Invalid enum values return the standard invalid params envelope. - Returns an empty `items` array (not an error) when nothing clears the suppression floor or the dataset has no data yet. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "producthunt-trends", "facet": "topic", "items": [ { "value": "artificial-intelligence", "count": 8421 }, { "value": "developer-tools", "count": 6033 }, { "value": "productivity", "count": 5210 } ] } } ```
MCP tool datasets_producthunt_trends_facets
/datasets/producthunt-trends/searchReturns aggregate Product Hunt launch trends from the dataset id enum value `producthunt-trends`. Aggregate-only: each row is a category-over-time cell (a topic, optionally within a calendar period), reporting launch count, total and average upvotes, average rating and the top product — never an individual product record. Thin cells are suppressed. group_by enum: `topic_month`, `topic_year`, `topic`. Sort enum: `period_desc`, `period_asc`, `launch_count_desc`, `sum_votes_desc`.
Response notes
- Each cell carries `topic`, `period` (`YYYY-MM` for `topic_month`, `YYYY` for `topic_year`, omitted for `topic`), `launches`, `total_votes`, `avg_votes`, `avg_rating` and `top_product`. - `avg_rating` is reported only for cells with enough rated launches, so a handful of reviews never swings the figure; it is omitted otherwise. - `top_product` is the single highest-upvoted product in the cell (`slug`, `name`, `votes`). - The `min_launches` field in the response echoes the effective suppression floor that was applied. - Results are paginated over the aggregate cells; the maximum result window is `10000`, so `page * page_size` must not exceed `10000`. - Invalid enum values return the standard invalid params envelope. - Returns an empty `items` array (not an error) when no cell clears the suppression floor or the dataset has no data yet. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "producthunt-trends", "group_by": "topic_month", "items": [ { "topic": "artificial-intelligence", "period": "2024-01", "launches": 312, "total_votes": 84210, "avg_votes": 269.9, "avg_rating": 4.61, "top_product": { "slug": "chatgpt", "name": "ChatGPT", "votes": 4120 } } ], "page": 1, "page_size": 20, "total": 1, "sort": "period_desc", "min_launches": 3 } } ```
MCP tool datasets_producthunt_trends_search
/datasets/reddit-trending/searchSearches daily snapshots of each tracked subreddit's hot-feed post order, stored in a search index (one document per subreddit × snapshot × rank) so history accumulates. With no `date` the latest snapshot is returned (today's trending); pair `subreddit` with `sort=date_desc` for a subreddit's trending history over time. There is no score or comment-count field — the underlying credential-free scraper does not expose vote counts, so `rank` reflects Reddit's own hot-feed order rather than a locally computed score.
Response notes
- With no `date` the latest snapshot is resolved automatically, so the default response is today's trending posts in rank order. - The response echoes the resolved `snapshot_date` so callers know which day was returned. - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Invalid enum values return the standard invalid params envelope. - A not-yet-populated index (or a subreddit not yet tracked) returns an empty `items` list rather than an error. - Does not trigger live scraping — for live subreddit posts use `/reddit/subreddit/{subreddit}/posts`. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "reddit-trending", "items": [ { "post_uid": "webscraping:2026-07-27:1", "subreddit": "webscraping", "snapshot_date": "2026-07-27", "rank": 1, "post_id": "1v7p3i7", "title": "I own a wood factory and want to use webscrapers to get info", "author": "Thin-Application-575", "permalink": "https://www.reddit.com/r/webscraping/comments/1v7p3i7/i_own_a_wood_factory_and_want_to_use_webscrapers/", "url": "https://www.reddit.com/r/webscraping/comments/1v7p3i7/i_own_a_wood_factory_and_want_to_use_webscrapers/", "domain": "self.webscraping", "created_utc": 1785123567 } ], "snapshot_date": "2026-07-27", "page": 1, "page_size": 20, "total": 10, "sort": "rank" } } ```
MCP tool datasets_reddit_trending_search
/datasets/sec-companies/facetsReturns terms-aggregation counts for one facet of the SEC companies dataset, scoped to the same filters as search. Facet enum: `sic`, `sic_description`, `exchange`, `state_of_incorporation`, `entity_type`, `reporting_currency`, `revenue_band`, `forms_filed`. `revenue_band` buckets latest-annual revenue into: `unknown`, `under_1m`, `1m_10m`, `10m_100m`, `100m_1b`, `1b_10b`, `over_10b`.
Response notes
- Returns an empty `items` array (not an error) when the dataset has no data yet. - Invalid `facet` values return the standard invalid params envelope. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "sec-companies", "facet": "sic_description", "items": [ { "value": "Electronic Computers", "count": 18 }, { "value": "Pharmaceutical Preparations", "count": 152 }, { "value": "State Commercial Banks", "count": 640 } ] } } ```
MCP tool datasets_sec_companies_facets
/datasets/sec-companies/financials/{cik}Returns a company's normalized financial-statement history (income statement, balance sheet, cash flow) from the SEC companies dataset, newest fiscal year first. An unknown CIK or a company with no XBRL data returns an empty series rather than a 404 — most filers without a current ticker have no financial-statement history at all. `lines` keys are the same normalized concept names the live `/sec/financials` endpoint uses (e.g. `revenue`, `net_income`, `total_assets`); `ratios` keys include `gross_margin`, `operating_margin`, `net_margin`, `revenue_growth_yoy`, `current_ratio`, `debt_to_equity`, `free_cash_flow` where derivable. statement enum: `income`, `balance`, `cash_flow`. period enum: `annual`, `quarterly`.
Response notes
- An unknown CIK or a company with no XBRL data returns an empty series (HTTP `200` with `count: 0`) rather than a `404` — most filers without a current ticker have no financial-statement history at all. - `lines` keys are the same normalized concept names the live `GET /sec/financials` endpoint uses (e.g. `revenue`, `net_income`, `total_assets`, `operating_cash_flow`). - `ratios` keys include `gross_margin`, `operating_margin`, `net_margin`, `revenue_growth_yoy`, `current_ratio`, `debt_to_equity`, `free_cash_flow` where derivable from the reported lines. - A period's `_id` is keyed by `(cik, statement, period, fiscal_year[, fiscal_period])`, so a later crawl that picks up an SEC restatement overwrites that period's figures rather than duplicating it — there is only ever one point per fiscal period. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "sec-companies", "cik": 320193, "count": 2, "points": [ { "cik": 320193, "statement": "income", "period": "annual", "fiscal_year": 2024, "fiscal_period": "FY", "end_date": "2024-09-28", "form": "10-K", "currency": "USD", "lines": { "revenue": 391035000000, "net_income": 93736000000, "gross_profit": 180683000000 }, "ratios": { "gross_margin": 0.4621, "net_margin": 0.2397, "revenue_growth_yoy": 0.0206 } }, { "cik": 320193, "statement": "income", "period": "annual", "fiscal_year": 2023, "fiscal_period": "FY", "end_date": "2023-09-30", "form": "10-K", "currency": "USD", "lines": { "revenue": 383285000000, "net_income": 96995000000 } } ] } } ```
MCP tool datasets_sec_companies_financials
/datasets/sec-companies/insider/{cik}Returns a company's insider (Form 3/4/5) transaction history from the SEC companies dataset, most recent transaction first. An unknown CIK or a company with no reported transactions returns an empty series rather than a 404.
Response notes
- An unknown CIK or a company with no reported transactions returns an empty series (HTTP `200` with `count: 0`) rather than a `404`. - Each item carries `owner_name`, `owner_title`, `is_director`/`is_officer`/`is_ten_percent_owner`, `security_title`, `transaction_date`, `code`, `acquired_or_disposed`, `shares`, `price_per_share`, `shares_owned_after`, and `filing_url`. - Rows are naturally idempotent (keyed by accession number + row sequence within the filing), so re-crawls never duplicate a transaction. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "sec-companies", "cik": 320193, "count": 1, "items": [ { "cik": 320193, "accession_number": "0000320193-25-000082", "form": "4", "filing_date": "2025-11-17", "owner_name": "COOK TIMOTHY D", "owner_title": "Chief Executive Officer", "is_officer": true, "security_title": "Common Stock", "transaction_date": "2025-11-15", "code": "S", "acquired_or_disposed": "D", "shares": 75000, "price_per_share": 268.42, "shares_owned_after": 3234400, "filing_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000082/" } ] } } ```
MCP tool datasets_sec_companies_insider
/datasets/sec-companies/items/{cik}Returns one SEC-reporting company by CIK from dataset id `sec-companies`, including its filing-history summary, financial-statement rollups, and trailing-90-day insider-activity summary. Returns 404 when the CIK is not in the dataset.
Response notes
- Returns `404` when the CIK is not in the dataset (not yet backfilled, or never a reporting company in scope — see the dataset's seed-population notes). - Same record shape as the `search` endpoint's `items[]` entries. - Does not trigger live scraping — for a single company's current data right now, use `GET /sec/company/submissions` instead. Example response: ```json { "code": 200, "msg": "OK", "data": { "cik": 320193, "cik_padded": "0000320193", "name": "Apple Inc.", "former_names": ["Apple Computer Inc."], "tickers": ["AAPL"], "primary_ticker": "AAPL", "exchange": ["Nasdaq"], "sic": "3571", "sic_description": "Electronic Computers", "state_of_incorporation": "CA", "fiscal_year_end": "0928", "entity_type": "operating", "filing_count": 342, "latest_filing_date": "2025-10-31", "forms_filed": ["10-K", "10-Q", "8-K", "4"], "recent_filings": [ { "accession_number": "0000320193-25-000081", "form": "10-K", "filing_date": "2025-10-31", "primary_doc_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000081/aapl-20250927.htm" } ], "latest_annual_fiscal_year": 2024, "latest_annual_revenue": 391035000000, "latest_annual_net_income": 93736000000, "latest_annual_total_assets": 364980000000, "revenue_band": "over_10b", "insider_txn_count_90d": 6, "insider_net_shares_90d": -18000, "insider_last_transaction_at": "2025-11-15", "crawled_at": "2026-07-15T03:12:00Z" } } ```
MCP tool datasets_sec_companies_item
/datasets/sec-companies/searchSearches SEC-reporting companies stored in a search index — normalized filing history, financial-statement rollups (latest annual/quarterly revenue, net income, total assets) and trailing-90-day insider (Form 3/4/5) activity. Sort enum: `relevance`, `name_asc`, `revenue_desc`, `net_income_desc`, `filing_recent_desc`, `insider_activity_desc`. `entity_type`, `sic`, `sic_description`, `exchange`, and `state_of_incorporation` are open filters over the exact values EDGAR reports for each filer (not a fixed enum) — discover real values via the matching facet.
Response notes
- Each item carries `cik`, `cik_padded`, `name`, `former_names`, `tickers`, `primary_ticker`, `exchange`, `sic`, `sic_description`, `state_of_incorporation`, `fiscal_year_end`, `entity_type`, `filing_count`, `latest_filing_date`, `forms_filed`, `recent_filings` (capped detail list), `reporting_currency`, the `latest_annual_*`/`latest_quarterly_*` financial rollups (each with a native `_revenue`/`_net_income`/`_total_assets` and a `_usd` normalized counterpart), `revenue_band`, and the `insider_txn_count_90d`/`insider_net_shares_90d`/`insider_last_transaction_at` trailing-90-day rollup. - Currency: financial figures are stored in each filer's native `reporting_currency` exactly as filed; the `*_usd` fields (and `revenue_band`, and the `revenue_desc`/`net_income_desc` sorts and `min_*`/`max_revenue` filters) are that value converted at fixed reference rates so they compare across currencies. Read the native figure for exactness; screen and sort on the USD fields. - Reference rates: the `*_usd` conversion uses a single fixed rate per currency, **as of 2026-07-17**, refreshed about annually — not the exchange rate on each filing's own reporting date. So a `*_usd` figure is accurate enough to sort, band and range-filter across currencies, but it is not a restatement: for a non-USD filer's exact dollar value, take the native figure and apply your own as-of rate. Conversion is applied only to currencies we hold a rate for; a filer reporting in any other currency keeps its native figures and simply has no `*_usd` value (so it sorts last rather than being given a guessed one). - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Invalid enum values return the standard invalid params envelope. - Returns an empty `items` array (not an error) when nothing matches or the dataset has no data yet. - Does not trigger live scraping — for a single company's current data right now, use `GET /sec/company/submissions` instead. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "sec-companies", "items": [ { "cik": 320193, "cik_padded": "0000320193", "name": "Apple Inc.", "tickers": ["AAPL"], "primary_ticker": "AAPL", "exchange": ["Nasdaq"], "sic": "3571", "sic_description": "Electronic Computers", "entity_type": "operating", "filing_count": 342, "latest_filing_date": "2025-10-31", "forms_filed": ["10-K", "10-Q", "8-K", "4"], "latest_annual_fiscal_year": 2024, "latest_annual_revenue": 391035000000, "latest_annual_net_income": 93736000000, "revenue_band": "over_10b", "insider_txn_count_90d": 6 } ], "page": 1, "page_size": 20, "total": 1, "sort": "relevance" } } ```
MCP tool datasets_sec_companies_search
/datasets/sec-institutional-positions/facetsReturns terms-aggregation counts for one facet of the SEC institutional positions dataset, scoped to the same filters as search. Facet enum: `manager`, `issuer`.
Response notes
- Returns an empty `items` array (not an error) when the dataset has no data yet. - Invalid `facet` values return the standard invalid params envelope. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "sec-institutional-positions", "facet": "manager", "items": [ { "value": "BERKSHIRE HATHAWAY INC", "count": 42 }, { "value": "VANGUARD GROUP INC", "count": 5218 } ] } } ```
MCP tool datasets_sec_institutional_positions_facets
/datasets/sec-institutional-positions/searchSearches institutional investment managers' quarterly 13F portfolio holdings stored in a search index. Filter by manager_cik for a manager's full reported portfolio (an exact, reliable filter), or by issuer_name/cusip for a best-effort view of which managers reported a position in an issuer — SEC publishes no authoritative CUSIP-to-CIK mapping, so the issuer side is never a guaranteed-resolved join. Sort enum: `value_desc`, `value_asc`, `shares_desc`.
Response notes
- Each item carries `manager_cik`, `manager_name`, `accession_number`, `filing_date`, `report_date`, `issuer_name`, `title_of_class`, `cusip`, `value` (USD, thousands as reported by the filer), `shares`, `share_type`, `put_call`, `investment_discretion`. - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Invalid enum values return the standard invalid params envelope. - Returns an empty `items` array (not an error) when nothing matches or the dataset has no data yet. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "sec-institutional-positions", "items": [ { "manager_cik": 1067983, "manager_name": "BERKSHIRE HATHAWAY INC", "accession_number": "0000950123-26-000456", "filing_date": "2026-05-15", "report_date": "2026-03-31", "issuer_name": "APPLE INC", "title_of_class": "COM", "cusip": "037833100", "value": 150000000, "shares": 900000, "share_type": "SH", "investment_discretion": "SOLE" } ], "page": 1, "page_size": 20, "total": 1, "sort": "value_desc" } } ```
MCP tool datasets_sec_institutional_positions_search
/datasets/steam-achievements/searchSearches per-game global achievement unlock percentages (one document per appid × achievement). Pass `app_id` to list a game's achievements. Sort enum: `percent_desc` (most-unlocked first, default), `percent_asc` (rarest first), `rank_asc`.
Response notes
- Defaults to the most-unlocked achievements first (`sort=percent_desc`). - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Invalid `sort` values return the standard invalid params envelope. - A not-yet-populated index returns an empty `items` list rather than an error. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "steam-achievements", "items": [ { "appid": 620, "name": "Career Achievement", "percent": 78.4000015258789, "rank": 0, "crawled_at": "2026-07-11T04:15:02Z" } ], "page": 1, "page_size": 20, "total": 51, "sort": "percent_desc" } } ```
MCP tool datasets_steam_achievements_search
/datasets/steam-charts/searchSearches daily snapshots of Steam's player-count and sales charts, stored in a search index (one document per chart × country × snapshot × rank) so history accumulates. Charts: `most_played` (weekly peak concurrent), `concurrent` (live concurrent players), `top_sellers` (weekly sales; country-specific). With no `date` the latest snapshot is returned (today's chart); pair `app_id` with `sort=date_desc` for an app's rank/players over time. Country is `global` for the player-count charts or an ISO code (e.g. `us`) for `top_sellers`. Sort enum: `rank`, `rank_desc`, `date_desc`.
Response notes
- With no `date` (and no single-app history request) the latest snapshot is resolved automatically, so the default response is today's chart in rank order. - The response echoes the resolved `snapshot_date` so callers know which day was returned. - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Invalid enum values return the standard invalid params envelope. - A not-yet-populated index returns an empty `items` list rather than an error. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "steam-charts", "items": [ { "chart_uid": "concurrent:global:2026-07-11:1", "chart": "concurrent", "country": "global", "snapshot_date": "2026-07-11", "rank": 1, "app_id": "730", "name": "Counter-Strike 2", "concurrent_in_game": 899091, "peak_in_game": 1308574 } ], "snapshot_date": "2026-07-11", "page": 1, "page_size": 20, "total": 100, "sort": "rank" } } ```
MCP tool datasets_steam_charts_search
/datasets/steam-games/facetsReturns terms aggregation counts for the Steam games dataset. Facet enum: `type`, `developer`, `publisher`, `genres`, `categories`, `tags`, `primary_tag`, `price_tier`, `review_tier`, `owners_bucket`, `release_year`, `run_id`, `is_free`, `coming_soon`, `platform_windows`, `platform_mac`, `platform_linux`. price_tier enum: `free`, `under5`, `5to15`, `15to30`, `30to60`, `over60`. review_tier enum: `overwhelmingly_positive`, `very_positive`, `positive`, `mostly_positive`, `mixed`, `mostly_negative`, `negative`, `very_negative`, `overwhelmingly_negative`, `insufficient`.
Response notes
- Returns up to `50` buckets ordered by descending count. - `facet` is required; unsupported values return the standard invalid params envelope. - Boolean facets (`is_free`, `coming_soon`, `platform_windows`, `platform_mac`, `platform_linux`) return `true`/`false` bucket values. - Returns an empty `items` array (not an error) when the dataset has no data yet. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "steam-games", "facet": "genres", "items": [ { "value": "Indie", "count": 4210 }, { "value": "Action", "count": 3175 }, { "value": "Adventure", "count": 2610 } ] } } ```
MCP tool datasets_steam_games_facets
/datasets/steam-games/items/{appid}Returns one enriched Steam catalog record by appid from dataset id enum value `steam-games`.
Response notes
- Returns `404` when the appid is not present in the stored dataset. - Returns the standard invalid params envelope when `appid` is empty or non-numeric. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "appid": 620, "name": "Portal 2", "developer": "Valve", "publisher": "Valve", "type": "game", "is_free": false, "price_cents": 999, "initial_price_cents": 1999, "discount_pct": 50, "price_tier": "5to15", "owners_min": 10000000, "owners_max": 20000000, "owners_midpoint": 15000000, "owners_bucket": "10,000,000 .. 20,000,000", "ccu": 12000, "positive": 100, "negative": 10, "total_reviews": 110, "review_score": 0.9091, "review_tier": "very_positive", "genres": ["Action", "Adventure"], "categories": ["Single-player", "Co-op"], "metacritic": 95, "release_date": "2011-04-19", "release_year": 2011, "platform_windows": true, "platform_mac": true, "platform_linux": true, "language_count": 22, "schema_version": 1 } } ```
MCP tool datasets_steam_games_item
/datasets/steam-games/searchSearches enriched public Steam catalog records stored in a search index. price_tier enum: `free`, `under5`, `5to15`, `15to30`, `30to60`, `over60`. review_tier enum: `overwhelmingly_positive`, `very_positive`, `positive`, `mostly_positive`, `mixed`, `mostly_negative`, `negative`, `very_negative`, `overwhelmingly_negative`, `insufficient`. Sort enum: `relevance`, `owners_desc`, `reviews_desc`, `review_score_desc`, `ccu_desc`, `metacritic_desc`, `price_asc`, `price_desc`, `release_desc`, `release_asc`.
Response notes
- Owner counts are SteamSpy public estimates, kept as `owners_min` / `owners_max` / `owners_midpoint`; `min_owners` filters on the midpoint. - `review_score` is the positive-review ratio (0 through 1); `review_tier` applies Steam's bands with a minimum-volume floor. - Prices are integer cents. `is_free` is set when the storefront marks the title free or the price is 0. - Defaults to `relevance` sort when `q` is supplied, otherwise `owners_desc`. - `min_price_cents` must not exceed `max_price_cents`; `min_release_year` must not exceed `max_release_year`. - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Invalid enum values return the standard invalid params envelope. - Returns an empty `items` array (not an error) when the dataset has no matches yet. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "steam-games", "items": [ { "appid": 570, "name": "Dota 2", "developer": "Valve", "publisher": "Valve", "type": "game", "is_free": true, "price_cents": 0, "price_tier": "free", "owners_midpoint": 150000000, "owners_bucket": "100,000,000 .. 200,000,000", "ccu": 600000, "total_reviews": 1750000, "review_score": 0.9714, "review_tier": "overwhelmingly_positive", "genres": ["Action", "Free to Play"], "metacritic": 90, "release_year": 2013, "platform_windows": true, "platform_mac": true, "platform_linux": true } ], "page": 1, "page_size": 20, "total": 1, "sort": "owners_desc" } } ```
MCP tool datasets_steam_games_search
/datasets/steam-news/searchSearches Steam news + announcements for tracked apps (one document per appid × gid; the latest items per app are kept). Filter by `app_id` for a single game's news, or full-text `q` over the title + contents. Sort enum: `date_desc` (newest first, default), `date_asc`.
Response notes
- Defaults to the newest items first (`sort=date_desc`). - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Invalid `sort` values return the standard invalid params envelope. - A not-yet-populated index returns an empty `items` list rather than an error. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "steam-news", "items": [ { "appid": 730, "gid": "5943051610484891716", "title": "Counter-Strike 2 Update", "url": "https://store.steampowered.com/news/app/730/view/5943051610484891716", "author": "Valve", "feed_label": "Community Announcements", "feed_name": "steam_community_announcements", "contents": "Released a new update with gameplay and stability fixes.", "tags": ["patchnotes"], "is_external_url": true, "date": 1752192000, "published_at": "2026-07-11T00:00:00Z", "crawled_at": "2026-07-11T04:12:33Z" } ], "page": 1, "page_size": 20, "total": 42, "sort": "date_desc" } } ```
MCP tool datasets_steam_news_search
/datasets/steam-playercounts/searchSearches the daily concurrent-player time series for tracked games (one document per appid × day). Pair `app_id` with `sort=date_desc` for a game's player-count history, or pass `date` for one day's snapshot. Sort enum: `date_desc` (default), `date_asc`, `players_desc`.
Response notes
- Defaults to newest snapshots first (`sort=date_desc`). - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Invalid `sort` values return the standard invalid params envelope. - A not-yet-populated index returns an empty `items` list rather than an error. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "steam-playercounts", "items": [ { "appid": 730, "name": "Counter-Strike 2", "snapshot_date": "2026-07-11", "player_count": 899091, "crawled_at": "2026-07-11T04:20:11Z" } ], "page": 1, "page_size": 20, "total": 365, "sort": "date_desc" } } ```
MCP tool datasets_steam_playercounts_search
/datasets/steam-prices/searchSearches the daily price time series for priced games (one document per appid × day; integer cents). Pair `app_id` with `sort=date_desc` for a game's price history, or pass `date` for one day's snapshot. Sort enum: `date_desc` (default), `date_asc`, `price_asc`, `price_desc`, `discount_desc`.
Response notes
- Defaults to newest snapshots first (`sort=date_desc`). - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Invalid `sort` values return the standard invalid params envelope. - A not-yet-populated index returns an empty `items` list rather than an error. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "steam-prices", "items": [ { "appid": 292030, "name": "The Witcher 3: Wild Hunt", "snapshot_date": "2026-07-11", "currency": "USD", "price_cents": 999, "initial_price_cents": 3999, "discount_pct": 75, "is_free": false, "crawled_at": "2026-07-11T04:25:47Z" } ], "page": 1, "page_size": 20, "total": 365, "sort": "date_desc" } } ```
MCP tool datasets_steam_prices_search
/datasets/steam-reviews/searchSearches the stored Steam review corpus (the most-helpful reviews per game; one document per appid × recommendation). Full-text `q` over the review body, filter by `app_id`, `language`, or `voted_up` (positive/negative). Sort enum: `votes_desc` (most-helpful first, default), `weighted_desc`, `date_desc`.
Response notes
- Defaults to the most-helpful reviews first (`sort=votes_desc`). - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Invalid `sort` values, or a `voted_up` that is not a boolean, return the standard invalid params envelope. - A not-yet-populated index returns an empty `items` list rather than an error. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "steam-reviews", "items": [ { "appid": 292030, "recommendation_id": "154765432", "language": "english", "review": "One of the best RPGs ever made.", "voted_up": true, "votes_up": 1284, "votes_funny": 37, "weighted_vote_score": 0.9812, "comment_count": 12, "steam_purchase": true, "received_for_free": false, "written_during_early_access": false, "playtime_at_review_min": 5820, "author_playtime_forever_min": 18240, "timestamp_created": 1751587200, "created_at": "2026-07-04T00:00:00Z", "crawled_at": "2026-07-11T04:31:09Z" } ], "page": 1, "page_size": 20, "total": 500, "sort": "votes_desc" } } ```
MCP tool datasets_steam_reviews_search
/datasets/techstack/facetsReturns distribution counts over the website tech-stack index (dataset id enum value `techstack`), honoring the same filters as search — the technology / category market-share view. Facet enum: `technology`, `category`, `cms`, `ecommerce`, `cdn`, `web_server`, `server_language`, `analytics`, `tld`, `render_tier`, `seed_source`.
Response notes
- Returns up to `50` buckets, each with the facet `value` and its `count`, ordered by count. - Invalid `facet` values return the standard invalid params envelope. - Returns an empty `items` array (not an error) when nothing matches or the dataset has no data yet. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "techstack", "facet": "ecommerce", "items": [ { "value": "Shopify", "count": 84120 }, { "value": "WooCommerce", "count": 61903 }, { "value": "Magento", "count": 12244 } ] } } ```
MCP tool datasets_techstack_facets
/datasets/techstack/items/{domain}Returns one site by its domain from dataset id enum value `techstack`, including every detected technology (name, categories, confidence, version, evidence) plus the CMS / e-commerce / CDN / web-server / server-language rollups. Also flags whether the domain looks like backend CDN/DNS/cloud-vendor infrastructure rather than a real, human-navigable site (see `is_infrastructure`). Returns 404 when the domain is not in the index.
Response notes
- The item carries `domain`, `tld`, `rank`, `is_infrastructure` (`true` when the domain looks like backend CDN/DNS/cloud-vendor infrastructure — e.g. `cloudfront.net`, `gtld-servers.net` — rather than a real, human-navigable site; a best-effort heuristic classification, so `false`/absent is not a guarantee the domain is a real site), `reachable`, `status` (HTTP status of the last probe attempt, when one was made), `technologies` (each with `name`, `categories`, `confidence`, `version`, `evidence`), `technology_names`, `categories`, `tech_count`, the `cms`/`ecommerce`/`cdn`/`web_server`/`server_language` rollups, `render_tier`, `detector_version`, and the crawl provenance (`run_id`, `crawled_at`). - When the last probe attempt didn't fully pass, the item also carries `failure_reason` (a short classification, e.g. `"blocked/challenge markers found"`, `"bad status 503"`, `"request failed"`), `probe_error` (the first line of the underlying transport error, when there was one), and `block_matched` (which block/challenge marker(s) were found, when `failure_reason` is a block/challenge classification). This can appear even when `reachable` is `true` — a blocked page returning a non-5xx status still counts as reachable while carrying a failure reason. Absent for a site that fully passed. - When the crawl looked for extra non-homepage pages (opt-in per run), the item also carries `secondary_pages_discovered` (count of candidate pages found on the homepage nav, regardless of fetch outcome), `secondary_pages_fetched` (count that were actually fetched successfully and contributed content — always <= discovered), `secondary_page_categories` (which categories were successfully fetched and contributed, e.g. `login`, `docs`, `cart`), `secondary_pages` (the full per-page audit trail — every discovered candidate, each entry `{category, url, fetched}`; `fetched: false` means the candidate was found on the homepage nav but the fetch itself failed, e.g. blocked or timed out), and `secondary_only_technology_names` (technology names detected only via a fetched secondary page, not the homepage itself — a subset of `technology_names`). Absent when no secondary pages were discovered for that run. - Returns the standard not-found envelope when the domain is not in the index. - Does not trigger live scraping; for a live, on-demand fingerprint of any URL use `/web/techstack`. Example response: ```json { "code": 200, "msg": "OK", "data": { "domain": "example-store.com", "tld": "com", "rank": 5231, "reachable": true, "technologies": [ { "name": "Shopify", "categories": ["Ecommerce"], "confidence": "high", "evidence": "markup: cdn.shopify.com" }, { "name": "Google Analytics", "categories": ["Analytics"], "confidence": "high", "evidence": "script: googletagmanager.com/gtag/js" }, { "name": "Cloudflare", "categories": ["CDN"], "confidence": "high", "evidence": "header: cf-ray" } ], "technology_names": ["Shopify", "Google Analytics", "Cloudflare", "Afterpay"], "categories": ["Analytics", "CDN", "Ecommerce", "Payment"], "tech_count": 4, "ecommerce": "Shopify", "cdn": "Cloudflare", "secondary_pages_discovered": 2, "secondary_pages_fetched": 1, "secondary_page_categories": ["cart"], "secondary_pages": [ { "category": "cart", "url": "https://example-store.com/cart", "fetched": true }, { "category": "docs", "url": "https://example-store.com/docs", "fetched": false } ], "secondary_only_technology_names": ["Afterpay"], "render_tier": "http", "detector_version": "2026.07.4", "run_id": "top1m-2026-07-08" } } ```
MCP tool datasets_techstack_item
/datasets/techstack/searchSearches the website tech-stack index (dataset id enum value `techstack`) — one record per site listing the web technologies it is built with (frameworks, CMS, e-commerce, analytics, CDNs, servers, and more), BuiltWith / Wappalyzer-style. The reverse-index filters are the point: repeat `technology` to require several at once (AND), `any_of` to match at least one (OR), and `not` to exclude — e.g. sites on `Shopify` and `Klaviyo` but not `Recharge`. Sort enum: `relevance`, `rank_asc`, `tech_count_desc`, `domain_asc`, `crawled_desc`. render_tier enum: `http`, `browser`.
Response notes
- Each item carries `domain`, `tld`, `rank`, `is_infrastructure` (`true` when the domain looks like backend CDN/DNS/cloud-vendor infrastructure rather than a real, human-navigable site; a best-effort heuristic), `reachable`, `technologies` (each with `name`, `categories`, `confidence`, `version`, `evidence`), `technology_names`, `categories`, `tech_count`, the `cms`/`ecommerce`/`cdn`/`web_server`/`server_language` rollups, `render_tier`, and `detector_version`. - When the crawl looked for extra non-homepage pages (opt-in per run), items also carry `secondary_pages_discovered` (count of candidates found on the homepage nav, regardless of fetch outcome), `secondary_pages_fetched` (count actually fetched successfully), `secondary_page_categories` (which categories were successfully fetched, e.g. `login`, `docs`, `cart`), `secondary_pages` (the full per-page audit trail, each entry `{category, url, fetched}`), and `secondary_only_technology_names` (technologies detected only via a fetched secondary page, not the homepage itself — a subset of `technology_names`). Absent when no secondary pages were discovered for that run. - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Invalid enum values return the standard invalid params envelope. - Returns an empty `items` array (not an error) when nothing matches or the dataset has no data yet. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "techstack", "items": [ { "domain": "example-store.com", "tld": "com", "rank": 5231, "reachable": true, "technologies": [ { "name": "Shopify", "categories": ["Ecommerce"], "confidence": "high", "evidence": "markup: cdn.shopify.com" }, { "name": "Cloudflare", "categories": ["CDN"], "confidence": "high", "evidence": "header: cf-ray" } ], "technology_names": ["Shopify", "Cloudflare"], "categories": ["CDN", "Ecommerce"], "tech_count": 2, "ecommerce": "Shopify", "cdn": "Cloudflare", "render_tier": "http", "detector_version": "2026.07.4" } ], "page": 1, "page_size": 20, "total": 1, "sort": "rank_asc" } } ```
MCP tool datasets_techstack_search
/datasets/trustmrr/facetsReturns terms-aggregation counts for one facet of the TrustMRR dataset, scoped to the same filters as search. Facet enum: `category`, `country`, `payment_provider`, `target_audience`, `business_type`, `tech`, `channels`, `listing_tier`, `status`, `on_sale`, `is_sponsored`, `tags`.
MCP tool datasets_trustmrr_facets
/datasets/trustmrr/history/{slug}Returns a startup's daily time-series of payment-provider-verified metrics — MRR, all-time revenue, last-30-days revenue, 30-day and 12-month traffic, 30-day growth, for-sale flag, asking price, valuation multiple, deal score and offer count — one point per day in chronological order (oldest first). The series accrues one point per calendar day, so a recently discovered startup returns a short or empty series rather than a 404.
MCP tool datasets_trustmrr_history
/datasets/trustmrr/items/{slug}Returns one startup record by slug from the TrustMRR dataset (dataset id `trustmrr`), including verified revenue/MRR, traffic, growth, category, tech stack, marketing channels and acquisition-marketplace fields.
MCP tool datasets_trustmrr_item
/datasets/trustmrr/searchSearches public startups with payment-provider-verified revenue and MRR, stored in a search index. Filter by category, country, payment provider, target audience, tech, marketing channel, listing tier and for-sale status, and by revenue/MRR/traffic/growth/multiple/asking-price ranges. Sort enum: `relevance`, `mrr_desc`, `revenue_desc`, `revenue_30d_desc`, `traffic_desc`, `growth_desc`, `deal_score_desc`, `price_asc`, `price_desc`, `multiple_asc`, `founded_desc`. status enum: `active`, `removed`.
MCP tool datasets_trustmrr_search
/datasets/vehicle-listings/facetsReturns terms aggregation counts for the vehicle listings dataset. Facet enum: `source`, `make`, `model`, `trim`, `body_style`, `transmission`, `drive_type`, `fuel_type`, `seller_type`, `state`, `run_id`.
MCP tool datasets_vehicle_listings_facets
/datasets/vehicle-listings/items/{id}Returns one crawled vehicle listing by id from dataset id enum value `vehicle-listings`. id is `<source>:<source_listing_id>`, e.g. `carmax:28187774`.
MCP tool datasets_vehicle_listings_item
/datasets/vehicle-listings/price-history/{id}Returns the recorded price-change events for one listing, oldest first. An event is recorded only when a crawl first observes the listing or observes a changed price -- not one entry per crawl pass -- so a listing whose price has never changed since it was first crawled returns a single entry.
MCP tool datasets_vehicle_listings_price_history
/datasets/vehicle-listings/searchSearches the crawled used-vehicle listings index. source enum: `carmax`, `autotrader`, `carsdotcom`. CarMax's own national inventory is fully enumerable (re-crawled on a standing schedule); Autotrader/Cars.com coverage is a best-effort zip-code sweep, not exhaustive, and their rows approximate city/state from the searched area rather than the seller's exact location. seller_type enum: `retailer`, `dealer`, `private` (not populated for every row -- see the dataset markdown). Sort enum: `relevance`, `recently_updated`, `newly_listed`, `price_asc`, `price_desc`, `mileage_asc`, `mileage_desc`, `year_desc`, `year_asc`.
MCP tool datasets_vehicle_listings_search
/datasets/x-users/facetsReturns terms aggregation counts for the X users dataset. Facet enum: `is_blue_verified`, `has_bio`, `has_external_url`, `source_tier`.
Response notes
- Returns up to `50` buckets ordered by descending count. - `facet` is required; unsupported values return the standard invalid params envelope. - Boolean facets (`is_blue_verified`, `has_bio`, `has_external_url`) return `true`/`false` bucket values. - `source_tier` bucket values are the seed tier names, e.g. `github-users`, `wikidata`, `tiktok-creators`, `journalists`. `unknown` labels records whose discovery tier was not recorded. - Returns an empty `items` array (not an error) when the dataset has no data yet. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "x-users", "facet": "source_tier", "items": [ { "value": "wikidata", "count": 427709 }, { "value": "github-users", "count": 54790 }, { "value": "tiktok-creators", "count": 4466 }, { "value": "journalists", "count": 840 } ] } } ```
MCP tool datasets_x_users_facets
/datasets/x-users/items/{username}Returns one X user record by username from dataset id enum value `x-users`.
Response notes
- Returns `404` when the username is not present in the stored dataset. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "username": "octodev", "id": "1634026666518519808", "name": "Octo Dev", "bio": "Building things in public", "location_raw": "Berlin, Germany", "external_url": "https://octo.dev", "avatar_url": "https://pbs.twimg.com/profile_images/example_normal.jpg", "banner_url": "https://pbs.twimg.com/profile_banners/example/banner", "is_blue_verified": true, "has_bio": true, "has_external_url": true, "followers": 12000, "following": 800, "posts": 3400, "follower_following_ratio": 15.0, "created_at": "2020-01-02T03:04:05Z", "source_tier": "github-users", "crawled_at": "2026-07-14T09:53:36Z", "schema_version": 1 } } ```
MCP tool datasets_x_users_item
/datasets/x-users/searchSearches public X (Twitter) user profiles stored in a search index. Sort enum: `relevance`, `followers_desc`, `followers_asc`, `crawled_at_desc`, `crawled_at_asc`, `created_at_desc`, `created_at_asc`.
Response notes
- Defaults to `relevance` sort when `q` is supplied, otherwise `followers_desc`. - `crawled_at_asc` returns the stalest records first; `created_at_asc` the oldest accounts first. - `min_followers` must not exceed `max_followers`, and `min_ratio` must not exceed `max_ratio`. - Date filters accept an RFC3339 timestamp or a bare `YYYY-MM-DD` calendar date; other formats return the invalid params envelope. - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Invalid enum values return the standard invalid params envelope. - Returns an empty `items` array (not an error) when the dataset has no matches yet. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "x-users", "items": [ { "username": "octodev", "name": "Octo Dev", "bio": "Building things in public", "location_raw": "Berlin, Germany", "external_url": "https://octo.dev", "avatar_url": "https://pbs.twimg.com/profile_images/example_normal.jpg", "is_blue_verified": true, "has_bio": true, "has_external_url": true, "followers": 12000, "following": 800, "posts": 3400, "follower_following_ratio": 15.0, "source_tier": "github-users", "crawled_at": "2026-07-14T09:53:36Z", "schema_version": 1 } ], "page": 1, "page_size": 20, "total": 1, "sort": "followers_desc" } } ```
MCP tool datasets_x_users_search
/datasets/youtube-creators/facetsReturns terms aggregation counts for the YouTube creators dataset. Facet enum: `region`, `discovery_source`.
Response notes
- `facet` parameter must be one of the documented enum values; invalid values return `400`. - Aggregates document counts up to top `50` buckets. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "youtube-creators", "facet": "region", "items": [ { "value": "US", "count": 612000 }, { "value": "IN", "count": 388000 }, { "value": "BR", "count": 201000 } ] } } ```
MCP tool datasets_youtube_creators_facets
/datasets/youtube-creators/items/{channel_id}Returns one YouTube channel record by channel id from dataset id enum value `youtube-creators`.
Response notes
- Returns `404` when the channel is not present in the dataset. Example response: ```json { "code": 200, "msg": "OK", "data": { "channel_id": "UCX6OQ3DkcsbYNE6H8uQQuVA", "channel_name": "MrBeast", "channel_url": "https://www.youtube.com/channel/UCX6OQ3DkcsbYNE6H8uQQuVA", "profile_pic": "https://yt3.googleusercontent.com/avatar.jpg", "links": ["https://www.beastphilanthropy.org"], "followers_count": 300000000, "followers_count_available": true, "videos_count": 830, "videos_count_available": true, "views_count": 55000000000, "views_count_available": true, "region": "US", "bio": "SUBSCRIBE FOR A COOKIE!", "joined_date": "2012-02-20T00:00:00Z", "discovery_source": "commoncrawl", "status": "ok", "discovered_at": "2026-07-03T00:00:00Z", "hydrated_at": "2026-08-19T00:00:00Z" } } ```
MCP tool datasets_youtube_creators_item
/datasets/youtube-creators/searchSearches public YouTube channel profiles stored in a search index — subscriber, video and view counts, region, bio and links, discovered via Common Crawl and Wikidata and hydrated from each channel's public About page. Sort enum: `relevance`, `followers_desc`, `followers_asc`, `views_desc`, `videos_desc`, `hydrated_at_desc`, `hydrated_at_asc`. Some channels hide their subscriber, video, or view count; the `_available` flags on each item distinguish a hidden count (stored as `0`, `*_available: false`) from a genuine `0`.
Response notes
- Defaults to `relevance` sort when `q` is supplied, otherwise `followers_desc`. - Some channels hide their subscriber, video, or view count on their public page. In that case the count is stored as `0` and its matching `*_available` flag is `false` — use the `_available` flags to tell a hidden count apart from a genuine `0`, and be aware that a `min_followers` filter above `0` will exclude channels with a hidden subscriber count. - `min_*` must not exceed the matching `max_*`. - Date filters accept an RFC3339 timestamp or a bare `YYYY-MM-DD` calendar date. - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - Only successfully hydrated channels are ever returned. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "youtube-creators", "items": [ { "channel_id": "UCX6OQ3DkcsbYNE6H8uQQuVA", "channel_name": "MrBeast", "channel_url": "https://www.youtube.com/channel/UCX6OQ3DkcsbYNE6H8uQQuVA", "profile_pic": "https://yt3.googleusercontent.com/avatar.jpg", "links": ["https://www.beastphilanthropy.org"], "followers_count": 300000000, "followers_count_available": true, "videos_count": 830, "videos_count_available": true, "views_count": 55000000000, "views_count_available": true, "region": "US", "bio": "SUBSCRIBE FOR A COOKIE!", "joined_date": "2012-02-20T00:00:00Z", "discovery_source": "commoncrawl", "status": "ok", "discovered_at": "2026-07-03T00:00:00Z", "hydrated_at": "2026-08-19T00:00:00Z" } ], "page": 1, "page_size": 20, "total": 2490319, "sort": "followers_desc" } } ```
MCP tool datasets_youtube_creators_search
Managed execution
Datasets endpoints query stored Crawlora data rather than fetching Google Maps live for each request. They are API-key protected read paths over indexed structured records, so there is no browser rendering, no proxy routing, and no live upstream page collection during a dataset search.
Reads from stored Google Maps business datasets
Uses indexed search and filtering for repeatable queries
Returns structured JSON records and metadata
Supports facets for category, geography, and website-status exploration
Supports geo radius search and distance sorting when coordinates are supplied
Does not trigger live scraping, browser execution, or proxy routing
Workflow comparison
Use this comparison when a manual map search is too limited for product, analytics, or enrichment workflows.
| Requirement | Google Maps app workflow | Crawlora dataset search |
|---|---|---|
| Search workflow | Manual, session-oriented exploration inside the app. | Repeatable API queries over stored structured records. |
| Filters | Limited visible filters and map UI refinements. | Query filters for category, country, state, county, city, town, rating, reviews, phone, website, and website status where available. |
| Facets | No API-style aggregation counts for planning and analysis. | Facet endpoints return counts for category, geography, and website-status fields. |
| Geo search | Interactive map movement is useful but hard to automate. | Nearby endpoint supports latitude, longitude, radius, and distance-sorted results. |
| Output | Results are optimized for viewing inside the app. | Responses are JSON for exports, enrichment, dashboards, and internal tools. |
| Execution | Live app interaction. | Stored dataset read path with no live scraping or proxy routing. |
Crawlora Datasets is not the Google Maps app and is not a live Google Maps proxy. Dataset endpoints query stored structured records that Crawlora has already collected and indexed. No proxy routing, browser rendering, or live upstream scraping is applied when a dataset search, facet, nearby, list, or detail request is executed. Customers are responsible for using returned data lawfully and in line with applicable terms and Crawlora terms.
Related APIs
Connect this endpoint with adjacent Crawlora search, monitoring, docs, and pricing pages.
Browse every stored-dataset vertical — apps, social profiles, SEC filers, PitchBook, housing markets, and more — beyond Google Maps.
OpenUse live Google Maps endpoints when you need current place search or place detail collection.
OpenNormalize addresses and coordinates before dataset search or enrichment.
OpenRead the full stored dataset endpoint reference.
OpenTest stored Google Maps business search with sample filters.
OpenReview plans, credits, and API usage limits.
OpenFAQ
Answers for developers evaluating Crawlora Datasets for structured local business search.
Dataset search is an API for querying stored structured records. This page covers the google-map-businesses dataset specifically; Crawlora's dataset search family also spans app catalogs, social profiles, SEC filers, PitchBook companies, housing markets, vehicle listings, and more — see /datasets for the full list. It is designed for repeatable search, filtering, facets, geo queries, and JSON output.
No. Dataset search reads indexed stored records. It does not apply proxy routing, browser rendering, or live upstream scraping for each query.
The Google Maps app is optimized for manual interactive discovery. Crawlora dataset search is optimized for programmatic filtering, pagination, facets, geo radius queries, distance sorting, and JSON output for products or analytics.
This page's endpoints cover google-map-businesses, with list, search, nearby, facets, and detail actions in the public catalog. It is one of many datasets in Crawlora's stored-dataset family — browse the rest, including apps, SEC filers, PitchBook companies, GitHub/X/Instagram/YouTube user profiles, Steam, housing markets, and vehicle listings, at /datasets.
Yes. The search endpoint supports filters such as category, country, state, county, city, town, minimum rating, minimum review count, website presence, phone presence, coordinates, radius, sort, page, and page_size where available.
Yes. The facets endpoint returns counts for supported fields such as category, country, state, county, city, town, and website_status.
Use live Google Maps endpoints when you need fresh live place search or place detail collection. Use Datasets when stored indexed records are enough and you need repeatable structured search.
Test /datasets/google-map-businesses/search in Playground, inspect filters and response fields in Docs, and use API-key protected JSON responses in your workflow.