MCP Server

LocationLists

io.github.kylehawke-stack/locationlists
Data & Analytics Maps & Location Public & reachable MCP 2025-11-25

What this MCP does

Searches, analyzes, filters, relates, counts, samples, and sells US business-location datasets, with geographic proximity and area-based queries.

buy_dataset
Buy a complete dataset (paid)
Buy an ENTIRE dataset outright and get a permanent download link for the CSV. Pays once in USDC on Base, at the same list price a human pays by card — no account and no checkout page.\n\nPrefer this over repeated query_locations calls whenever you want most of a file. Metered queries are priced per row and deliberately cost more than the file if you assemble it that way, so past a few hundred rows buying outright is both cheaper and complete. get_dataset (free) gives the price and record count first.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dataset'], 'properties': {'dataset': {'type': 'string', 'description': 'Dataset slug, e.g. generac-dealers. Use search_datasets first.'}}, 'additionalProperties': False}
check_order
Check order status
Given a Stripe Checkout session id (cs_…), reports whether it is paid and, if so, returns the permanent download link for the CSV. Works for whole files, filtered rows and combined (several-dataset) orders. Any download link takes ?shape=hubspot or ?shape=salesforce for CRM-ready column names (every column kept).
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['sessionId'], 'properties': {'sessionId': {'type': 'string', 'pattern': '^cs_', 'description': 'Checkout session id from create_checkout'}}, 'additionalProperties': False}
cotenancy
Cotenancy between two sets (free)
Free, counts only. How two sets of places sit together: the share of set a within radius_miles of set b and of b within radius_miles of a, how many places overlap, and the county / zip / state / metro areas that have both, only a, or only b (top 10 of each named). Each set is a dataset, datasets or category plus filters, the same as count_locations; any US brand or kind of place works, including Overture lists from search_datasets. Example: {"a": {"dataset": "<slug>"}, "b": {"dataset": "<other slug>"}, "radius_miles": 1, "by": "county"}.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['a', 'b'], 'properties': {'a': {'type': 'object', 'properties': {'zip': {'type': 'string'}, 'city': {'type': 'string'}, 'near': {'type': 'object', 'properties': {'lat': {'type': 'number'}, 'lng': {'type': 'number'}, 'zip': {'type': 'string', 'description': '5-digit zip'}, 'place': {'type': 'string', 'description': 'City or town with state, e.g. "Topeka, KS"'}, 'points': {'type': 'array', 'items': {'type': 'object', 'properties': {'lat': {'$ref': '#/properties/a/properties/near/properties/lat'}, 'lng': {'$ref': '#/properties/a/properties/near/properties/lng'}, 'zip': {'$ref': '#/properties/a/properties/near/properties/zip'}, 'place': {'$ref': '#/properties/a/properties/near/properties/place'}}, 'additionalProperties': False}, 'maxItems': 10, 'minItems': 1, 'description': "Several points instead of one place/zip/lat+lng (at most 10): a row counts when it is within the radius or drive-time band of ANY of them, e.g. an operator's offices."}, 'radius_miles': {'type': 'number', 'maximum': 500, 'description': 'Only rows within this straight-line distance of the point (or of any of the points). Free.', 'exclusiveMinimum': 0}, 'drive_minutes': {'type': 'integer', 'maximum': 240, 'minimum': 5, 'description': 'Instead of radius_miles: only rows a car can reach from the point (or from any of the points) in this many minutes, typical road speeds, no live traffic. On this server: 5-60 minutes; the routing provider draws no longer band, so a 2- or 4-hour reach is not available here — use the largest band, 60 minutes, or radius_miles. One routing call per point per request; on /find it needs an issued key (radius is free). Drive time depends on an outside routing service: when an answer says drive-time search is unavailable or not switched on, ask the same question again with radius_miles (straight-line miles, always available, free).'}}, 'description': 'Distance search on lists with coordinates: ONE of place, zip, lat+lng or points, with radius_miles or drive_minutes (not both).', 'additionalProperties': False}, 'metro': {'type': 'string', 'description': 'Only rows in one metro area (CBSA): its 5-digit code ("37980") or its name ("Philadelphia", "Philadelphia, PA"). The same as areas_in {"by": "metro", "ids": [code]}.'}, 'state': {'type': 'string'}, 'where': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'op'], 'properties': {'op': {'enum': ['eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'in', 'contains', 'starts_with', 'is_blank', 'not_blank', 'not_contains', 'not_in', 'any_of'], 'type': 'string'}, 'field': {'type': 'string'}, 'value': {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}, {'type': 'array', 'items': {'type': ['string', 'number']}}]}, 'any_of': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'op'], 'properties': {'op': {'enum': ['eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'in', 'contains', 'starts_with', 'is_blank', 'not_blank', 'not_contains', 'not_in', 'any_of'], 'type': 'string'}, 'field': {'type': 'string'}, 'value': {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}, {'type': 'array', 'items': {'type': ['string', 'number']}}]}}, 'additionalProperties': False}, 'maxItems': 12}}, 'additionalProperties': False}, 'maxItems': 12}, 'county': {'type': 'string'}, 'dataset': {'type': 'string'}, 'exclude': {'type': 'array', 'items': {'type': 'string'}, 'description': "Dataset slugs left out wherever the set expands: a category minus one of its members (a list's competitors are its own category with itself excluded)."}, 'areas_in': {'type': 'object', 'required': ['by', 'ids'], 'properties': {'by': {'enum': ['county', 'zip', 'state', 'metro'], 'type': 'string'}, 'ids': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 200, 'minItems': 1, 'description': 'County FIPS, 5-digit ZIP, CBSA code or state code — the `id` of a count_by_area row'}}, 'description': 'Only rows in these areas, e.g. {"by": "county", "ids": ["51760"]} for Richmond city, VA — the ids count_by_area returns, placed the same way (/find: areas_in=county:51760).', 'additionalProperties': False}, 'category': {'type': 'string'}, 'datasets': {'type': 'array', 'items': {'type': 'string'}, 'minItems': 1}, 'opendata': {'type': 'object', 'required': ['source'], 'properties': {'zips': {'type': 'array', 'items': {'type': 'string'}, 'minItems': 1, 'description': 'Or cut it to 5-digit ZIP codes, e.g. ["78114", "78154"] (/find: opendata_zips=78114,78154)'}, 'state': {'type': 'string', 'description': 'Cut the register to one state, e.g. "NY" (/find: opendata_state=NY)'}, 'where': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 12, 'description': 'Conditions on the register\'s own columns, each "column:op:value" with op eq | starts_with | contains | not_blank, e.g. ["license_status:starts_with:Active"] (/find: opendata_where=)'}, 'source': {'type': 'string', 'description': 'The register\'s key, "<domain>/<id>" — search_datasets with kind "register" finds it, e.g. "data.ny.gov/cb42-qumz" (New York\'s licensed child-care programs)'}}, 'description': 'INSTEAD of dataset / datasets / category: a public register read LIVE from the body that publishes it, at the moment of the question — e.g. a state\'s licensed child-care programs. Matched by distance only (relate.mode near / not_near, near_m metres, default 30), because the publisher\'s own coordinates are the evidence. It is not a list we sell: the answer gives counts and a preview, names the publisher, the licence and when it was read, and prices only the rows of OUR lists. E.g. {"dataset": "ymca", "state": "NY", "relate": {"mode": "near", "near_m": 30, "anchor": {"opendata": {"source": "data.ny.gov/cb42-qumz", "state": "NY"}}}}.', 'additionalProperties': False}, 'area_where': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 6, 'description': 'Only rows whose county/zip/state/metro meets a Census condition, each as "<kind>:<attribute><op><value>" (ops > >= < <= =; values accept 1M, 250k, $50,000, 10%), e.g. "county:population>1000000". Every clause must hold; the fact is the area\'s, not the row\'s, and it adds nothing to the price. Attributes: population (population), households (households), median_household_income (median household income), median_age (median age), pct_65_plus (share of residents aged 65 or older), pct_bachelors_plus (share with a bachelor\'s degree or higher), housing_units (housing units), owner_occupied_share (owner-occupied share), median_home_value (median home value), establishments (business establishments), employees (employees), population_estimate (population estimate; county/metro/state only), population_growth_since_2020 (population growth since 2020; county/metro/state only); by NAICS sector, <sector>_establishments and <sector>_employees (employees: county/metro/state only) for agriculture, mining, utilities, construction, manufacturing, wholesale_trade, retail_trade, transportation, information, finance, real_estate, professional, management, administrative, educational_services, health_care, arts, accommodation, other_services; by detailed NAICS industry (1999 codes, 2 to 6 digits, the Census\'s titles), naics_<code>_establishments (county/metro/state/zip), naics_<code>_employees and naics_<code>_payroll (county/metro/state), e.g. naics_4471_establishments (gasoline stations naics 4471 establishments), naics_8111_establishments (automotive repair and maintenance establishments), naics_238990_establishments (all other specialty trade contractors naics 238990 establishments), naics_561621_establishments (security systems services except locksmiths establishments); 262 nclimdiv fields (NOAA nClimDiv county climate normals, 1991–2020, and 2025 actuals (release 2026-09-04)): january_high (January high), february_high (February high), march_high (March high), april_high (April high), may_high (May high), june_high (June high), …; 190 storms fields (NOAA Storm Events Database, 2016–2025, events a year by county): astronomical_low_tide_events (astronomical low tide events a year), avalanche_events (avalanche events a year), blizzard_events (blizzard events a year), coastal_flood_events (coastal flood events a year), cold_or_wind_chill_events (cold or wind chill events a year), debris_flow_events (debris flow events a year), …; 127 normals-annual fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): annual_cooling_degree_days_base_40 (annual cooling degree days base 40), annual_cooling_degree_days_base_45 (annual cooling degree days base 45), annual_cooling_degree_days_base_50 (annual cooling degree days base 50), annual_cooling_degree_days_base_55 (annual cooling degree days base 55), annual_cooling_degree_days_base_57 (annual cooling degree days base 57), annual_cooling_degree_days_base_60 (annual cooling degree days base 60), …; 67 normals-winter fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): winter_cooling_degree_days_base_40 (winter cooling degree days base 40), winter_cooling_degree_days_base_45 (winter cooling degree days base 45), winter_cooling_degree_days_base_50 (winter cooling degree days base 50), winter_cooling_degree_days_base_55 (winter cooling degree days base 55), winter_cooling_degree_days_base_57 (winter cooling degree days base 57), winter_cooling_degree_days_base_60 (winter cooling degree days base 60), …; 67 normals-spring fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): spring_cooling_degree_days_base_40 (spring cooling degree days base 40), spring_cooling_degree_days_base_45 (spring cooling degree days base 45), spring_cooling_degree_days_base_50 (spring cooling degree days base 50), spring_cooling_degree_days_base_55 (spring cooling degree days base 55), spring_cooling_degree_days_base_57 (spring cooling degree days base 57), spring_cooling_degree_days_base_60 (spring cooling degree days base 60), …; 67 normals-summer fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): summer_cooling_degree_days_base_40 (summer cooling degree days base 40), summer_cooling_degree_days_base_45 (summer cooling degree days base 45), summer_cooling_degree_days_base_50 (summer cooling degree days base 50), summer_cooling_degree_days_base_55 (summer cooling degree days base 55), summer_cooling_degree_days_base_57 (summer cooling degree days base 57), summer_cooling_degree_days_base_60 (summer cooling degree days base 60), …; 67 normals-fall fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): fall_cooling_degree_days_base_40 (fall cooling degree days base 40), fall_cooling_degree_days_base_45 (fall cooling degree days base 45), fall_cooling_degree_days_base_50 (fall cooling degree days base 50), fall_cooling_degree_days_base_55 (fall cooling degree days base 55), fall_cooling_degree_days_base_57 (fall cooling degree days base 57), fall_cooling_degree_days_base_60 (fall cooling degree days base 60), …; 15 hourly fields (NOAA U.S. Climate Normals 1991–2020, hourly station normals summarised over the year, by county): hourly_temperature (round the clock temperature), dew_point (dew point), sea_level_pressure (sea level pressure), cooling_degree_hours (cooling degree hours), heating_degree_hours (heating degree hours), clear_sky_share (share of clear hours), …; 51 b01001 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): pct_under_18 (share of residents aged 0 to 17), pct_5_to_14 (share of residents aged 5 to 14), b01001_001 (sex by age total), b01001_002 (sex by age male), b01001_003 (sex by age male 0 to 4 years), b01001_004 (sex by age male 5 to 9 years), …; 20 b11005 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): pct_households_with_people_under_18 (share of households with people aged 0 to 17), b11005_001 (households by presence of people 0 to 17 years by household type total), b11005_002 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years), b11005_003 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households), b11005_004 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households married-couple family), b11005_005 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households other family), …; 3 b25003 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b25003_001 (tenure total), b25003_002 (tenure owner occupied), b25003_003 (tenure renter occupied); 13 b08303 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b08303_001 (travel time to work total), b08303_002 (travel time to work 0 to 4 minutes), b08303_003 (travel time to work 5 to 9 minutes), b08303_004 (travel time to work 10 to 14 minutes), b08303_005 (travel time to work 15 to 19 minutes), b08303_006 (travel time to work 20 to 24 minutes), …; 7 b23025 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b23025_001 (employment status for the population 16 years or older total), b23025_002 (employment status for the population 16 years or older in labor force), b23025_003 (employment status for the population 16 years or older in labor force civilian labor force), b23025_004 (employment status for the population 16 years or older in labor force civilian labor force employed), b23025_005 (employment status for the population 16 years or older in labor force civilian labor force unemployed), b23025_006 (employment status for the population 16 years or older in labor force armed forces), …; 30 buildings fields (Overture Maps buildings, release 2026-08-19.0, summed per area): buildings (buildings), multi_story_buildings (multi-story buildings), mid_rise_buildings (mid-rise buildings), high_rise_buildings (high-rise buildings), buildings_2_floors_plus (buildings with 2 published floors and up), buildings_4_floors_plus (buildings with 4 published floors and up), …; 13 building-types fields (Overture Maps buildings, release 2026-08-19.0, summed per area): residential_buildings (residential buildings), outbuilding_buildings (outbuilding buildings), commercial_buildings (commercial buildings), industrial_buildings (industrial buildings), education_buildings (education buildings), agricultural_buildings (agricultural buildings), …; 43 building-classes fields (Overture Maps buildings, release 2026-08-19.0, summed per area): house_class_buildings (house class buildings), detached_class_buildings (detached class buildings), residential_class_buildings (residential class buildings), garage_class_buildings (garage class buildings), apartments_class_buildings (apartments class buildings), shed_class_buildings (shed class buildings), …; 42 building-classes-2 fields (Overture Maps buildings, release 2026-08-19.0, summed per area): religious_class_buildings (religious class buildings), civic_class_buildings (civic class buildings), fire_station_class_buildings (fire station class buildings), bungalow_class_buildings (bungalow class buildings), pavilion_class_buildings (pavilion class buildings), hut_class_buildings (hut class buildings), …; 27 building-roofs fields (Overture Maps buildings, release 2026-08-19.0, summed per area): gabled_roof_buildings (buildings with a gabled roof), flat_roof_buildings (buildings with a flat roof), hipped_roof_buildings (buildings with a hipped roof), mansard_roof_buildings (buildings with a mansard roof), round_roof_buildings (buildings with a round roof), pyramidal_roof_buildings (buildings with a pyramidal roof), …; 11 building-facades fields (Overture Maps buildings, release 2026-08-19.0, summed per area): brick_facade_buildings (buildings with a brick facade), wood_facade_buildings (buildings with a wood facade), metal_facade_buildings (buildings with a metal facade), concrete_facade_buildings (buildings with a concrete facade), plaster_facade_buildings (buildings with a plaster facade), plastic_facade_buildings (buildings with a plastic facade), ….'}, 'area_columns': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 6, 'description': 'Census and NOAA facts added to EVERY ROW as columns named <kind>_<attribute>, each as "<kind>:<attribute>,<attribute>", e.g. "county:population,median_household_income" — the county / ZIP / metro / state figures beside each location, in the preview and in the file you buy. Free. The same attribute words area_where takes (listed there).'}}, 'description': 'First set: dataset, datasets or category, plus filters', 'additionalProperties': False}, 'b': {'type': 'object', 'properties': {'zip': {'$ref': '#/properties/a/properties/zip'}, 'city': {'$ref': '#/properties/a/properties/city'}, 'near': {'$ref': '#/properties/a/properties/near'}, 'metro': {'$ref': '#/properties/a/properties/metro'}, 'state': {'$ref': '#/properties/a/properties/state'}, 'where': {'$ref': '#/properties/a/properties/where'}, 'county': {'$ref': '#/properties/a/properties/county'}, 'dataset': {'$ref': '#/properties/a/properties/dataset'}, 'exclude': {'$ref': '#/properties/a/properties/exclude'}, 'areas_in': {'$ref': '#/properties/a/properties/areas_in'}, 'category': {'$ref': '#/properties/a/properties/category'}, 'datasets': {'$ref': '#/properties/a/properties/datasets'}, 'opendata': {'$ref': '#/properties/a/properties/opendata', 'description': 'INSTEAD of dataset / datasets / category: a public register read LIVE from the body that publishes it, at the moment of the question — e.g. a state\'s licensed child-care programs. Matched by distance only (relate.mode near / not_near, near_m metres, default 30), because the publisher\'s own coordinates are the evidence. It is not a list we sell: the answer gives counts and a preview, names the publisher, the licence and when it was read, and prices only the rows of OUR lists. E.g. {"dataset": "ymca", "state": "NY", "relate": {"mode": "near", "near_m": 30, "anchor": {"opendata": {"source": "data.ny.gov/cb42-qumz", "state": "NY"}}}}.'}, 'area_where': {'$ref': '#/properties/a/properties/area_where'}, 'area_columns': {'$ref': '#/properties/a/properties/area_columns'}}, 'description': 'Second set, given the same way', 'additionalProperties': False}, 'by': {'enum': ['county', 'zip', 'state', 'metro'], 'type': 'string', 'description': 'Area unit for both/only-a/only-b (default county)'}, 'in_state': {'type': 'string', 'description': 'Only areas in this state'}, 'radius_miles': {'type': 'number', 'maximum': 250, 'description': 'Distance that counts as together (default 1 mile)', 'exclusiveMinimum': 0}}, 'additionalProperties': False}
count_by_area
Count locations by area (free)
Free, counts only. Counts places per county / zip / state / metro for 1 to 4 labeled sets (each a dataset, datasets or category plus filters), and compares them: has (areas with at least one of every listed set) and lacks (areas with none of any listed set). E.g. counties that have set a but no set b; ZIPs where a closure-filtered set exists and another set still has places. Rows that cannot be placed are counted, never read as zero. Every area row can carry Census / NOAA figures (area_columns) and the areas can be ranked by one of them or by a count (order_by), so markets rank by demand; limit + offset page through every matching area (page.total, page.nextOffset), or all: true lists every matching area in one answer; top_values shows what kinds of place make up each count. WARNINGS lead the answer when they change how it reads: a set that could not be counted is never a zero (no has/lacks answer uses it), a lacks set too thin to support absence (few places, or an open-data brand list below the brand's own count), and areas in states a set's lists do not cover (those rows carry notCovered: there 0 means not covered, not none there). notes explain placement (duplicates counted once, state column vs county). REACH: a set's `near` (the same shape count_locations takes) keeps only its rows within radius_miles or drive_minutes of one point or of ANY of several `points`, BEFORE they are rolled up by area — so a regional operator is counted where it reaches, not nationally: "metros within 2 hours by road of these three offices" is by=metro with near={points:[…], drive_minutes:120}. Drive time on this server: 5-60 minutes; the routing provider draws no longer band, so a 2- or 4-hour reach is not available here — use the largest band, 60 minutes, or radius_miles. Radius is free everywhere; on /find, drive_minutes needs an issued key and the answer offers the radius link instead. Drive time depends on an outside routing service: when an answer says drive-time search is unavailable or not switched on, ask the same question again with radius_miles (straight-line miles, always available, free). FROM A CELL TO ITS ROWS: every area listed carries `rows` per set: the count, the price of those rows, a link, and `args` — the count_locations / query_locations / create_query_checkout call (the set's filters plus areas_in for that area) that returns exactly them, so a count cell is one call from its named rows. with_sample: true adds, on the first areas listed, the free preview behind each cell — the list's fixed published sample rows that fall inside the area, marked matches_your_question (never a sample of the area's places). Example: {"by": "county", "sets": [{"label": "a", "dataset": "<slug>"}, {"label": "b", "dataset": "<other slug>"}], "has": ["a"], "lacks": ["b"], "in_state": "VA"}. Ranked by demand: {"by": "county", "sets": [{"label": "a", "dataset": "<slug>"}], "area_columns": ["county:population,median_household_income"], "order_by": {"field": "population"}, "limit": 100, "offset": 100}. Regional: {"by": "metro", "sets": [{"label": "ours", "dataset": "<slug>", "near": {"points": [{"place": "Richmond, VA"}, {"place": "Norfolk, VA"}], "radius_miles": 100}}]}.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['by', 'sets'], 'properties': {'by': {'enum': ['county', 'zip', 'state', 'metro'], 'type': 'string'}, 'all': {'type': 'boolean', 'description': 'List every matching area, however many'}, 'has': {'type': 'array', 'items': {'type': 'string'}}, 'per': {'type': 'number', 'minimum': 1, 'description': 'Counts per this many residents of each area from its Census population (100000 adds per_100k to every area and ranks by it), or per this many of per_field.'}, 'sets': {'type': 'array', 'items': {'type': 'object', 'required': ['label'], 'properties': {'zip': {'type': 'string'}, 'city': {'type': 'string'}, 'near': {'type': 'object', 'properties': {'lat': {'type': 'number'}, 'lng': {'type': 'number'}, 'zip': {'type': 'string', 'description': '5-digit zip'}, 'place': {'type': 'string', 'description': 'City or town with state, e.g. "Topeka, KS"'}, 'points': {'type': 'array', 'items': {'type': 'object', 'properties': {'lat': {'$ref': '#/properties/sets/items/properties/near/properties/lat'}, 'lng': {'$ref': '#/properties/sets/items/properties/near/properties/lng'}, 'zip': {'$ref': '#/properties/sets/items/properties/near/properties/zip'}, 'place': {'$ref': '#/properties/sets/items/properties/near/properties/place'}}, 'additionalProperties': False}, 'maxItems': 10, 'minItems': 1, 'description': "Several points instead of one place/zip/lat+lng (at most 10): a row counts when it is within the radius or drive-time band of ANY of them, e.g. an operator's offices."}, 'radius_miles': {'type': 'number', 'maximum': 500, 'description': 'Only rows within this straight-line distance of the point (or of any of the points). Free.', 'exclusiveMinimum': 0}, 'drive_minutes': {'type': 'integer', 'maximum': 240, 'minimum': 5, 'description': 'Instead of radius_miles: only rows a car can reach from the point (or from any of the points) in this many minutes, typical road speeds, no live traffic. On this server: 5-60 minutes; the routing provider draws no longer band, so a 2- or 4-hour reach is not available here — use the largest band, 60 minutes, or radius_miles. One routing call per point per request; on /find it needs an issued key (radius is free). Drive time depends on an outside routing service: when an answer says drive-time search is unavailable or not switched on, ask the same question again with radius_miles (straight-line miles, always available, free).'}}, 'description': 'Distance search on lists with coordinates: ONE of place, zip, lat+lng or points, with radius_miles or drive_minutes (not both).', 'additionalProperties': False}, 'label': {'type': 'string', 'description': 'Short name, e.g. "a" or "closed"'}, 'metro': {'type': 'string', 'description': 'Only rows in one metro area (CBSA): its 5-digit code ("37980") or its name ("Philadelphia", "Philadelphia, PA"). The same as areas_in {"by": "metro", "ids": [code]}.'}, 'state': {'type': 'string'}, 'where': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'op'], 'properties': {'op': {'enum': ['eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'in', 'contains', 'starts_with', 'is_blank', 'not_blank', 'not_contains', 'not_in', 'any_of'], 'type': 'string'}, 'field': {'type': 'string'}, 'value': {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}, {'type': 'array', 'items': {'type': ['string', 'number']}}]}, 'any_of': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'op'], 'properties': {'op': {'enum': ['eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'in', 'contains', 'starts_with', 'is_blank', 'not_blank', 'not_contains', 'not_in', 'any_of'], 'type': 'string'}, 'field': {'type': 'string'}, 'value': {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}, {'type': 'array', 'items': {'type': ['string', 'number']}}]}}, 'additionalProperties': False}, 'maxItems': 12}}, 'additionalProperties': False}, 'maxItems': 12}, 'county': {'type': 'string'}, 'dataset': {'type': 'string'}, 'exclude': {'type': 'array', 'items': {'type': 'string'}, 'description': "Dataset slugs left out wherever the set expands: a category minus one of its members (a list's competitors are its own category with itself excluded)."}, 'areas_in': {'type': 'object', 'required': ['by', 'ids'], 'properties': {'by': {'enum': ['county', 'zip', 'state', 'metro'], 'type': 'string'}, 'ids': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 200, 'minItems': 1, 'description': 'County FIPS, 5-digit ZIP, CBSA code or state code — the `id` of a count_by_area row'}}, 'description': 'Only rows in these areas, e.g. {"by": "county", "ids": ["51760"]} for Richmond city, VA — the ids count_by_area returns, placed the same way (/find: areas_in=county:51760).', 'additionalProperties': False}, 'category': {'type': 'string'}, 'datasets': {'type': 'array', 'items': {'type': 'string'}, 'minItems': 1}, 'opendata': {'type': 'object', 'required': ['source'], 'properties': {'zips': {'type': 'array', 'items': {'type': 'string'}, 'minItems': 1, 'description': 'Or cut it to 5-digit ZIP codes, e.g. ["78114", "78154"] (/find: opendata_zips=78114,78154)'}, 'state': {'type': 'string', 'description': 'Cut the register to one state, e.g. "NY" (/find: opendata_state=NY)'}, 'where': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 12, 'description': 'Conditions on the register\'s own columns, each "column:op:value" with op eq | starts_with | contains | not_blank, e.g. ["license_status:starts_with:Active"] (/find: opendata_where=)'}, 'source': {'type': 'string', 'description': 'The register\'s key, "<domain>/<id>" — search_datasets with kind "register" finds it, e.g. "data.ny.gov/cb42-qumz" (New York\'s licensed child-care programs)'}}, 'description': 'INSTEAD of dataset / datasets / category: a public register read LIVE from the body that publishes it, at the moment of the question — e.g. a state\'s licensed child-care programs. Matched by distance only (relate.mode near / not_near, near_m metres, default 30), because the publisher\'s own coordinates are the evidence. It is not a list we sell: the answer gives counts and a preview, names the publisher, the licence and when it was read, and prices only the rows of OUR lists. E.g. {"dataset": "ymca", "state": "NY", "relate": {"mode": "near", "near_m": 30, "anchor": {"opendata": {"source": "data.ny.gov/cb42-qumz", "state": "NY"}}}}.', 'additionalProperties': False}, 'area_where': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 6, 'description': 'Only rows whose county/zip/state/metro meets a Census condition, each as "<kind>:<attribute><op><value>" (ops > >= < <= =; values accept 1M, 250k, $50,000, 10%), e.g. "county:population>1000000". Every clause must hold; the fact is the area\'s, not the row\'s, and it adds nothing to the price. Attributes: population (population), households (households), median_household_income (median household income), median_age (median age), pct_65_plus (share of residents aged 65 or older), pct_bachelors_plus (share with a bachelor\'s degree or higher), housing_units (housing units), owner_occupied_share (owner-occupied share), median_home_value (median home value), establishments (business establishments), employees (employees), population_estimate (population estimate; county/metro/state only), population_growth_since_2020 (population growth since 2020; county/metro/state only); by NAICS sector, <sector>_establishments and <sector>_employees (employees: county/metro/state only) for agriculture, mining, utilities, construction, manufacturing, wholesale_trade, retail_trade, transportation, information, finance, real_estate, professional, management, administrative, educational_services, health_care, arts, accommodation, other_services; by detailed NAICS industry (1999 codes, 2 to 6 digits, the Census\'s titles), naics_<code>_establishments (county/metro/state/zip), naics_<code>_employees and naics_<code>_payroll (county/metro/state), e.g. naics_4471_establishments (gasoline stations naics 4471 establishments), naics_8111_establishments (automotive repair and maintenance establishments), naics_238990_establishments (all other specialty trade contractors naics 238990 establishments), naics_561621_establishments (security systems services except locksmiths establishments); 262 nclimdiv fields (NOAA nClimDiv county climate normals, 1991–2020, and 2025 actuals (release 2026-09-04)): january_high (January high), february_high (February high), march_high (March high), april_high (April high), may_high (May high), june_high (June high), …; 190 storms fields (NOAA Storm Events Database, 2016–2025, events a year by county): astronomical_low_tide_events (astronomical low tide events a year), avalanche_events (avalanche events a year), blizzard_events (blizzard events a year), coastal_flood_events (coastal flood events a year), cold_or_wind_chill_events (cold or wind chill events a year), debris_flow_events (debris flow events a year), …; 127 normals-annual fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): annual_cooling_degree_days_base_40 (annual cooling degree days base 40), annual_cooling_degree_days_base_45 (annual cooling degree days base 45), annual_cooling_degree_days_base_50 (annual cooling degree days base 50), annual_cooling_degree_days_base_55 (annual cooling degree days base 55), annual_cooling_degree_days_base_57 (annual cooling degree days base 57), annual_cooling_degree_days_base_60 (annual cooling degree days base 60), …; 67 normals-winter fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): winter_cooling_degree_days_base_40 (winter cooling degree days base 40), winter_cooling_degree_days_base_45 (winter cooling degree days base 45), winter_cooling_degree_days_base_50 (winter cooling degree days base 50), winter_cooling_degree_days_base_55 (winter cooling degree days base 55), winter_cooling_degree_days_base_57 (winter cooling degree days base 57), winter_cooling_degree_days_base_60 (winter cooling degree days base 60), …; 67 normals-spring fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): spring_cooling_degree_days_base_40 (spring cooling degree days base 40), spring_cooling_degree_days_base_45 (spring cooling degree days base 45), spring_cooling_degree_days_base_50 (spring cooling degree days base 50), spring_cooling_degree_days_base_55 (spring cooling degree days base 55), spring_cooling_degree_days_base_57 (spring cooling degree days base 57), spring_cooling_degree_days_base_60 (spring cooling degree days base 60), …; 67 normals-summer fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): summer_cooling_degree_days_base_40 (summer cooling degree days base 40), summer_cooling_degree_days_base_45 (summer cooling degree days base 45), summer_cooling_degree_days_base_50 (summer cooling degree days base 50), summer_cooling_degree_days_base_55 (summer cooling degree days base 55), summer_cooling_degree_days_base_57 (summer cooling degree days base 57), summer_cooling_degree_days_base_60 (summer cooling degree days base 60), …; 67 normals-fall fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): fall_cooling_degree_days_base_40 (fall cooling degree days base 40), fall_cooling_degree_days_base_45 (fall cooling degree days base 45), fall_cooling_degree_days_base_50 (fall cooling degree days base 50), fall_cooling_degree_days_base_55 (fall cooling degree days base 55), fall_cooling_degree_days_base_57 (fall cooling degree days base 57), fall_cooling_degree_days_base_60 (fall cooling degree days base 60), …; 15 hourly fields (NOAA U.S. Climate Normals 1991–2020, hourly station normals summarised over the year, by county): hourly_temperature (round the clock temperature), dew_point (dew point), sea_level_pressure (sea level pressure), cooling_degree_hours (cooling degree hours), heating_degree_hours (heating degree hours), clear_sky_share (share of clear hours), …; 51 b01001 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): pct_under_18 (share of residents aged 0 to 17), pct_5_to_14 (share of residents aged 5 to 14), b01001_001 (sex by age total), b01001_002 (sex by age male), b01001_003 (sex by age male 0 to 4 years), b01001_004 (sex by age male 5 to 9 years), …; 20 b11005 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): pct_households_with_people_under_18 (share of households with people aged 0 to 17), b11005_001 (households by presence of people 0 to 17 years by household type total), b11005_002 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years), b11005_003 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households), b11005_004 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households married-couple family), b11005_005 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households other family), …; 3 b25003 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b25003_001 (tenure total), b25003_002 (tenure owner occupied), b25003_003 (tenure renter occupied); 13 b08303 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b08303_001 (travel time to work total), b08303_002 (travel time to work 0 to 4 minutes), b08303_003 (travel time to work 5 to 9 minutes), b08303_004 (travel time to work 10 to 14 minutes), b08303_005 (travel time to work 15 to 19 minutes), b08303_006 (travel time to work 20 to 24 minutes), …; 7 b23025 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b23025_001 (employment status for the population 16 years or older total), b23025_002 (employment status for the population 16 years or older in labor force), b23025_003 (employment status for the population 16 years or older in labor force civilian labor force), b23025_004 (employment status for the population 16 years or older in labor force civilian labor force employed), b23025_005 (employment status for the population 16 years or older in labor force civilian labor force unemployed), b23025_006 (employment status for the population 16 years or older in labor force armed forces), …; 30 buildings fields (Overture Maps buildings, release 2026-08-19.0, summed per area): buildings (buildings), multi_story_buildings (multi-story buildings), mid_rise_buildings (mid-rise buildings), high_rise_buildings (high-rise buildings), buildings_2_floors_plus (buildings with 2 published floors and up), buildings_4_floors_plus (buildings with 4 published floors and up), …; 13 building-types fields (Overture Maps buildings, release 2026-08-19.0, summed per area): residential_buildings (residential buildings), outbuilding_buildings (outbuilding buildings), commercial_buildings (commercial buildings), industrial_buildings (industrial buildings), education_buildings (education buildings), agricultural_buildings (agricultural buildings), …; 43 building-classes fields (Overture Maps buildings, release 2026-08-19.0, summed per area): house_class_buildings (house class buildings), detached_class_buildings (detached class buildings), residential_class_buildings (residential class buildings), garage_class_buildings (garage class buildings), apartments_class_buildings (apartments class buildings), shed_class_buildings (shed class buildings), …; 42 building-classes-2 fields (Overture Maps buildings, release 2026-08-19.0, summed per area): religious_class_buildings (religious class buildings), civic_class_buildings (civic class buildings), fire_station_class_buildings (fire station class buildings), bungalow_class_buildings (bungalow class buildings), pavilion_class_buildings (pavilion class buildings), hut_class_buildings (hut class buildings), …; 27 building-roofs fields (Overture Maps buildings, release 2026-08-19.0, summed per area): gabled_roof_buildings (buildings with a gabled roof), flat_roof_buildings (buildings with a flat roof), hipped_roof_buildings (buildings with a hipped roof), mansard_roof_buildings (buildings with a mansard roof), round_roof_buildings (buildings with a round roof), pyramidal_roof_buildings (buildings with a pyramidal roof), …; 11 building-facades fields (Overture Maps buildings, release 2026-08-19.0, summed per area): brick_facade_buildings (buildings with a brick facade), wood_facade_buildings (buildings with a wood facade), metal_facade_buildings (buildings with a metal facade), concrete_facade_buildings (buildings with a concrete facade), plaster_facade_buildings (buildings with a plaster facade), plastic_facade_buildings (buildings with a plastic facade), ….'}, 'area_columns': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 6, 'description': 'Census and NOAA facts added to EVERY ROW as columns named <kind>_<attribute>, each as "<kind>:<attribute>,<attribute>", e.g. "county:population,median_household_income" — the county / ZIP / metro / state figures beside each location, in the preview and in the file you buy. Free. The same attribute words area_where takes (listed there).'}}, 'additionalProperties': False}, 'maxItems': 4, 'minItems': 1}, 'lacks': {'type': 'array', 'items': {'type': 'string'}}, 'limit': {'type': 'integer', 'maximum': 1000, 'minimum': 1, 'description': 'Areas listed per call (default: every matching area when 500 or fewer match, else the first 100; at most 1000)'}, 'offset': {'type': 'integer', 'maximum': 100000, 'minimum': 0, 'description': "Areas to skip before the first listed: page through every matching area with limit + offset. The answer's page block gives total and the next offset (null on the last page)."}, 'in_state': {'type': 'string', 'description': 'Only areas in this state'}, 'order_by': {'type': 'object', 'required': ['field'], 'properties': {'field': {'type': 'string', 'description': 'count (default), a set label, per (with per), name, or an attribute the rows carry from area_where / per_field / area_columns'}, 'direction': {'enum': ['asc', 'desc'], 'type': 'string', 'description': 'Default desc (name: asc)'}}, 'description': 'Rank the areas: {"field": "median_household_income"} for the richest counties first, {"field": "a", "direction": "asc"} for the fewest of set a first. Unknown figures sort last.', 'additionalProperties': False}, 'per_field': {'type': 'string', 'description': 'With per: the Census count the rate is over instead of population, e.g. per=1000 with per_field=construction_establishments adds per_1000_construction_establishments. Any count attribute: population, households, housing_units, establishments, employees, agriculture_establishments, mining_establishments, utilities_establishments, every <sector>_establishments / <sector>_employees, and every naics_<code>_establishments / naics_<code>_employees (2- to 6-digit NAICS, e.g. naics_8111_establishments).'}, 'area_where': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 6, 'description': 'Only areas meeting a Census condition, each as "<kind>:<attribute><op><value>" about the same kind as by (or a state), e.g. "county:population>500000" with lacks for "counties over 500k people with no X". Attributes: population (population), households (households), median_household_income (median household income), median_age (median age), pct_65_plus (share of residents aged 65 or older), pct_bachelors_plus (share with a bachelor\'s degree or higher), housing_units (housing units), owner_occupied_share (owner-occupied share), median_home_value (median home value), establishments (business establishments), employees (employees), population_estimate (population estimate; county/metro/state only), population_growth_since_2020 (population growth since 2020; county/metro/state only); by NAICS sector, <sector>_establishments and <sector>_employees (employees: county/metro/state only) for agriculture, mining, utilities, construction, manufacturing, wholesale_trade, retail_trade, transportation, information, finance, real_estate, professional, management, administrative, educational_services, health_care, arts, accommodation, other_services; by detailed NAICS industry (1999 codes, 2 to 6 digits, the Census\'s titles), naics_<code>_establishments (county/metro/state/zip), naics_<code>_employees and naics_<code>_payroll (county/metro/state), e.g. naics_4471_establishments (gasoline stations naics 4471 establishments), naics_8111_establishments (automotive repair and maintenance establishments), naics_238990_establishments (all other specialty trade contractors naics 238990 establishments), naics_561621_establishments (security systems services except locksmiths establishments); 262 nclimdiv fields (NOAA nClimDiv county climate normals, 1991–2020, and 2025 actuals (release 2026-09-04)): january_high (January high), february_high (February high), march_high (March high), april_high (April high), may_high (May high), june_high (June high), …; 190 storms fields (NOAA Storm Events Database, 2016–2025, events a year by county): astronomical_low_tide_events (astronomical low tide events a year), avalanche_events (avalanche events a year), blizzard_events (blizzard events a year), coastal_flood_events (coastal flood events a year), cold_or_wind_chill_events (cold or wind chill events a year), debris_flow_events (debris flow events a year), …; 127 normals-annual fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): annual_cooling_degree_days_base_40 (annual cooling degree days base 40), annual_cooling_degree_days_base_45 (annual cooling degree days base 45), annual_cooling_degree_days_base_50 (annual cooling degree days base 50), annual_cooling_degree_days_base_55 (annual cooling degree days base 55), annual_cooling_degree_days_base_57 (annual cooling degree days base 57), annual_cooling_degree_days_base_60 (annual cooling degree days base 60), …; 67 normals-winter fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): winter_cooling_degree_days_base_40 (winter cooling degree days base 40), winter_cooling_degree_days_base_45 (winter cooling degree days base 45), winter_cooling_degree_days_base_50 (winter cooling degree days base 50), winter_cooling_degree_days_base_55 (winter cooling degree days base 55), winter_cooling_degree_days_base_57 (winter cooling degree days base 57), winter_cooling_degree_days_base_60 (winter cooling degree days base 60), …; 67 normals-spring fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): spring_cooling_degree_days_base_40 (spring cooling degree days base 40), spring_cooling_degree_days_base_45 (spring cooling degree days base 45), spring_cooling_degree_days_base_50 (spring cooling degree days base 50), spring_cooling_degree_days_base_55 (spring cooling degree days base 55), spring_cooling_degree_days_base_57 (spring cooling degree days base 57), spring_cooling_degree_days_base_60 (spring cooling degree days base 60), …; 67 normals-summer fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): summer_cooling_degree_days_base_40 (summer cooling degree days base 40), summer_cooling_degree_days_base_45 (summer cooling degree days base 45), summer_cooling_degree_days_base_50 (summer cooling degree days base 50), summer_cooling_degree_days_base_55 (summer cooling degree days base 55), summer_cooling_degree_days_base_57 (summer cooling degree days base 57), summer_cooling_degree_days_base_60 (summer cooling degree days base 60), …; 67 normals-fall fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): fall_cooling_degree_days_base_40 (fall cooling degree days base 40), fall_cooling_degree_days_base_45 (fall cooling degree days base 45), fall_cooling_degree_days_base_50 (fall cooling degree days base 50), fall_cooling_degree_days_base_55 (fall cooling degree days base 55), fall_cooling_degree_days_base_57 (fall cooling degree days base 57), fall_cooling_degree_days_base_60 (fall cooling degree days base 60), …; 15 hourly fields (NOAA U.S. Climate Normals 1991–2020, hourly station normals summarised over the year, by county): hourly_temperature (round the clock temperature), dew_point (dew point), sea_level_pressure (sea level pressure), cooling_degree_hours (cooling degree hours), heating_degree_hours (heating degree hours), clear_sky_share (share of clear hours), …; 51 b01001 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): pct_under_18 (share of residents aged 0 to 17), pct_5_to_14 (share of residents aged 5 to 14), b01001_001 (sex by age total), b01001_002 (sex by age male), b01001_003 (sex by age male 0 to 4 years), b01001_004 (sex by age male 5 to 9 years), …; 20 b11005 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): pct_households_with_people_under_18 (share of households with people aged 0 to 17), b11005_001 (households by presence of people 0 to 17 years by household type total), b11005_002 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years), b11005_003 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households), b11005_004 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households married-couple family), b11005_005 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households other family), …; 3 b25003 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b25003_001 (tenure total), b25003_002 (tenure owner occupied), b25003_003 (tenure renter occupied); 13 b08303 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b08303_001 (travel time to work total), b08303_002 (travel time to work 0 to 4 minutes), b08303_003 (travel time to work 5 to 9 minutes), b08303_004 (travel time to work 10 to 14 minutes), b08303_005 (travel time to work 15 to 19 minutes), b08303_006 (travel time to work 20 to 24 minutes), …; 7 b23025 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b23025_001 (employment status for the population 16 years or older total), b23025_002 (employment status for the population 16 years or older in labor force), b23025_003 (employment status for the population 16 years or older in labor force civilian labor force), b23025_004 (employment status for the population 16 years or older in labor force civilian labor force employed), b23025_005 (employment status for the population 16 years or older in labor force civilian labor force unemployed), b23025_006 (employment status for the population 16 years or older in labor force armed forces), …; 30 buildings fields (Overture Maps buildings, release 2026-08-19.0, summed per area): buildings (buildings), multi_story_buildings (multi-story buildings), mid_rise_buildings (mid-rise buildings), high_rise_buildings (high-rise buildings), buildings_2_floors_plus (buildings with 2 published floors and up), buildings_4_floors_plus (buildings with 4 published floors and up), …; 13 building-types fields (Overture Maps buildings, release 2026-08-19.0, summed per area): residential_buildings (residential buildings), outbuilding_buildings (outbuilding buildings), commercial_buildings (commercial buildings), industrial_buildings (industrial buildings), education_buildings (education buildings), agricultural_buildings (agricultural buildings), …; 43 building-classes fields (Overture Maps buildings, release 2026-08-19.0, summed per area): house_class_buildings (house class buildings), detached_class_buildings (detached class buildings), residential_class_buildings (residential class buildings), garage_class_buildings (garage class buildings), apartments_class_buildings (apartments class buildings), shed_class_buildings (shed class buildings), …; 42 building-classes-2 fields (Overture Maps buildings, release 2026-08-19.0, summed per area): religious_class_buildings (religious class buildings), civic_class_buildings (civic class buildings), fire_station_class_buildings (fire station class buildings), bungalow_class_buildings (bungalow class buildings), pavilion_class_buildings (pavilion class buildings), hut_class_buildings (hut class buildings), …; 27 building-roofs fields (Overture Maps buildings, release 2026-08-19.0, summed per area): gabled_roof_buildings (buildings with a gabled roof), flat_roof_buildings (buildings with a flat roof), hipped_roof_buildings (buildings with a hipped roof), mansard_roof_buildings (buildings with a mansard roof), round_roof_buildings (buildings with a round roof), pyramidal_roof_buildings (buildings with a pyramidal roof), …; 11 building-facades fields (Overture Maps buildings, release 2026-08-19.0, summed per area): brick_facade_buildings (buildings with a brick facade), wood_facade_buildings (buildings with a wood facade), metal_facade_buildings (buildings with a metal facade), concrete_facade_buildings (buildings with a concrete facade), plaster_facade_buildings (buildings with a plaster facade), plastic_facade_buildings (buildings with a plastic facade), ….'}, 'top_values': {'type': 'object', 'required': ['column'], 'properties': {'n': {'type': 'integer', 'maximum': 5, 'minimum': 1, 'description': 'Values per area, 1-5 (default 3)'}, 'column': {'type': 'string', 'description': "A CLASS column of the sets' files: category, type, brand, tier, status… (get_dataset lists columns)"}}, 'description': 'The most common values of one class column per area, per set (top on each area row): what kinds of place make up a count — {"column": "category"} shows that Elkhart County\'s 47 trailer dealers are 30 dealers, 12 manufacturers, 5 horse-trailer specialists. Free, bounded, and the same figures a filtered count gives. A name, address or contact column is refused: a free answer names classes, never records — the rows are in the file you buy.', 'additionalProperties': False}, 'with_sample': {'type': 'boolean', 'description': "Free. On the first 10 areas listed, each set's fixed published sample rows that fall inside the area (source_dataset, the list's columns, matches_your_question). The same published rows every question sees, so cells never add up to the file."}, 'area_columns': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 40, 'description': 'Census and NOAA figures RETURNED on every area row (in attributes), each as "<kind>:<attribute>,<attribute>" about the same kind as by (or "state:…" for the area\'s state, returned as state_<attribute>), e.g. ["county:population,median_household_income,households"]. Free. The vocabulary is the area manifest — the same words area_where takes (population, households, median household income, median age, growth since 2020, home values, <sector>_establishments / <sector>_employees by NAICS sector, and the NOAA weather elements); https://locationlists.com/find?areas=county&dataset=<slug>&area_columns=county:<attribute> refuses an unknown attribute by name and lists the nearest ones. Rank the areas by one with order_by.'}}, 'additionalProperties': False}
count_locations
Count matching locations (free)
Free. How many rows of one dataset match a filter — on geography AND any other column (e.g. nonprofits with revenue_amt gt 2000000, dealers with dealerClass eq 'Elite'). Also reports how many rows were excluded only because a tested column was blank, so a thin column is not mistaken for a small answer; a small or empty answer says how many rows each condition removed and what the column really holds. Returns the exact card price of the matching rows, a link where the user can see and buy them, and the same rows in a cheaper list when one has them. Works for geography: city, state, county, zip, metro (a CBSA code or name: "all hospitals in the Philadelphia metro" is one call), areas_in (the county / ZIP / metro / state ids count_by_area returns), or `near` a place ("Los Angeles, CA"), zip or lat/lng within radius_miles or drive_minutes, on lists with coordinates. AREA DATA, free: area_where keeps rows whose county / ZIP / metro / state meets a Census condition (county:population>1000000), and area_columns adds those figures to every row as columns (county:population,median_household_income). COVERAGE: a list's coverage is measured on its rows (get_dataset coverageDetail: states and rows per state); a state the list has no rows in is said as not covered, never as none there. get_sample takes the same filters and returns the count plus the list's fixed free sample rows, marked matches_your_question. The result's `next` says exactly how to get every matching row. To cover several chains near one place, pass datasets or category (e.g. "retail" or "restaurant") and a total instead of dataset: one answer with counts per dataset, duplicates removed and up to 3 preview rows, one price and one file. Use get_dataset first for the column names. Scans the live file, so it can take several seconds on large datasets. Every number in the result is named: matched (rows meeting every filter), rowsRead (how many rows of the list were read to answer: the whole file for one of our lists, or, for an Overture list, only the index shards the question's area or place touches — so it can be far smaller than the list), maxRowsPerCall (the most rows one paid call returns), excludedBlank (rows dropped only because a tested column was blank), and price (soldBy says whether the list is sold as a file, by the row, or both; perRowUsd and perCallFeeUsd are the by-the-row terms, wallet the USDC total, breakdown each row source at its rate). To price exactly what one query_locations call returns — "the 10 nearest" — pass the same limit (and offset / order_by): `slice` then has that call's exact USDC amount line by line and the card price of the same rows. A paid call is billed for the rows it returns: each row at its own list's per-row rate (an Overture open-data row at $0.005; a row of a chain LocationLists sells its own list for, at that list's rate), plus a $0.01 per-call fee, rounded once to the nearest cent, at least $0.02, never more than the whole list. count_locations with the same filters, limit and offset quotes exactly that page, row source by row source (price.breakdown), before anything is paid.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'zip': {'type': 'string', 'description': 'Shortcut for where zip eq <value>'}, 'city': {'type': 'string', 'description': 'Shortcut for where city eq <value>'}, 'near': {'type': 'object', 'properties': {'lat': {'type': 'number'}, 'lng': {'type': 'number'}, 'zip': {'type': 'string', 'description': '5-digit zip'}, 'place': {'type': 'string', 'description': 'City or town with state, e.g. "Topeka, KS". A neighborhood or misspelling falls back to the nearest Census place name in that state, and the answer says which.'}, 'points': {'type': 'array', 'items': {'type': 'object', 'properties': {'lat': {'$ref': '#/properties/near/properties/lat'}, 'lng': {'$ref': '#/properties/near/properties/lng'}, 'zip': {'$ref': '#/properties/near/properties/zip'}, 'place': {'type': 'string', 'description': 'City or town with state, e.g. "Topeka, KS"'}}, 'additionalProperties': False}, 'maxItems': 10, 'minItems': 1, 'description': "Several points instead of one place/zip/lat+lng (at most 10): a row counts when it is within the radius or drive-time band of ANY of them, e.g. an operator's offices."}, 'radius_miles': {'type': 'number', 'maximum': 500, 'description': 'Only rows within this straight-line distance of the point (or of any of the points). Free.', 'exclusiveMinimum': 0}, 'drive_minutes': {'type': 'integer', 'maximum': 240, 'minimum': 5, 'description': 'Instead of radius_miles: only rows a car can reach from the point (or from any of the points) in this many minutes, typical road speeds, no live traffic. On this server: 5-60 minutes; the routing provider draws no longer band, so a 2- or 4-hour reach is not available here — use the largest band, 60 minutes, or radius_miles. One routing call per point per request; on /find it needs an issued key (radius is free). Drive time depends on an outside routing service: when an answer says drive-time search is unavailable or not switched on, ask the same question again with radius_miles (straight-line miles, always available, free).'}}, 'description': "Distance search, on lists with map coordinates (distanceSearch in search results): give ONE of place, zip, lat+lng, or `points` (several of those: within reach of ANY of them, distance to the nearest). Rows come back nearest first with a distance_miles column (straight line); combine with limit for 'the 10 closest', radius_miles for 'everything within 25 miles', or drive_minutes for 'everything within a 30-minute drive' (adds within_drive_minutes; 5-60 minutes; the routing provider draws no longer band, so a 2- or 4-hour reach is not available here — use the largest band, 60 minutes, or radius_miles). Give radius_miles or drive_minutes, not both. Rows without coordinates are excluded and counted. Drive time depends on an outside routing service: when an answer says drive-time search is unavailable or not switched on, ask the same question again with radius_miles (straight-line miles, always available, free).", 'additionalProperties': False}, 'limit': {'type': 'integer', 'maximum': 10000, 'minimum': 1, 'description': "Price a slice instead of every match: the first `limit` rows past `offset` in the delivery order — e.g. near a place with limit 10 for the 10 nearest — exactly the rows a purchase with the same limit returns. The answer's `slice` has their exact price, each row source at its own rate (open-data rows vs rows of lists we sell), and the card price."}, 'metro': {'type': 'string', 'description': 'Only rows in one metro area (CBSA): its 5-digit code ("37980") or its name ("Philadelphia", "Philadelphia, PA"). The same as areas_in {"by": "metro", "ids": [code]}: rows are placed the way count_by_area places them, so "all hospitals in the Philadelphia metro" is one count, one price and one purchase.'}, 'state': {'type': 'string', 'description': 'Shortcut for where state eq <value>. Two-letter code.'}, 'total': {'type': 'integer', 'maximum': 10000, 'minimum': 1, 'description': "With datasets or category: rows wanted across all of them, split in proportion to each dataset's matches"}, 'where': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'op'], 'properties': {'op': {'enum': ['eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'in', 'contains', 'starts_with', 'is_blank', 'not_blank', 'not_contains', 'not_in', 'any_of'], 'type': 'string', 'description': "eq/ne: case-insensitive match (numeric when both sides are numbers; yes/no, true/false, y/n and 1/0 count as the same answer). gt/gte/lt/lte: numeric when value is a number, else text order (works for ISO dates). in / not_in: value is an array. contains / not_contains / starts_with: case-insensitive text. is_blank/not_blank: no value (a source's no-value marker such as <UNAVAIL> or N/A counts as blank). any_of: no value; the row is kept when ANY condition in any_of holds (e.g. brand not_in [chains] OR brand is_blank, to keep independents)."}, 'field': {'type': 'string', 'description': 'Column name as listed by get_dataset (columns[].name), e.g. revenue_amt'}, 'value': {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}, {'type': 'array', 'items': {'type': ['string', 'number']}}]}, 'any_of': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'op'], 'properties': {'op': {'enum': ['eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'in', 'contains', 'starts_with', 'is_blank', 'not_blank', 'not_contains', 'not_in', 'any_of'], 'type': 'string'}, 'field': {'type': 'string'}, 'value': {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}, {'type': 'array', 'items': {'type': ['string', 'number']}}]}}, 'additionalProperties': False}, 'maxItems': 12, 'description': 'With op any_of: the conditions, any one of which keeps the row (one level).'}}, 'additionalProperties': False}, 'maxItems': 12, 'description': 'Conditions on any column, all of which must hold. Blank cells never satisfy a comparison; the response counts rows excluded only because a tested column was blank. A small or empty answer says how many rows each condition removed and what the column really holds.'}, 'county': {'type': 'string', 'description': 'Shortcut for where county eq <value>'}, 'offset': {'type': 'integer', 'maximum': 10000, 'minimum': 0, 'description': 'With limit: skip this many matching rows, as a paged purchase does, so the quote is for that page'}, 'dataset': {'type': 'string', 'description': 'Dataset slug, e.g. nonprofits-va. To combine several, give datasets or category instead.'}, 'exclude': {'type': 'array', 'items': {'type': 'string'}, 'description': "With category or datasets: dataset slugs left out (a category minus one of its members, e.g. a list's competitors are its own category with itself excluded)"}, 'permits': {'type': 'object', 'properties': {'days': {'type': 'integer', 'maximum': 3650, 'minimum': 1, 'description': 'Issued in the last N days (default 365). /find: permits_days=90'}, 'type': {'enum': ['any', 'new_construction', 'commercial', 'residential', 'renovation', 'demolition', 'electrical', 'plumbing', 'mechanical', 'roofing', 'solar', 'sign', 'pool'], 'type': 'string', 'description': 'The kind of permit (default any). /find: permits_type=commercial'}, 'metres': {'type': 'integer', 'maximum': 200, 'minimum': 10, 'description': 'How close a permit must be to the row, in metres (default 60). /find: permits_m=60'}, 'min_usd': {'type': 'number', 'minimum': 0, 'description': 'Valuation at least this many dollars, e.g. 1000000. /find: permits_min_usd=1000000'}}, 'description': 'Only rows with a BUILDING PERMIT nearby, read live from the city\'s own permit register at question time — e.g. {"dataset": "<slug>", "city": "Austin", "state": "TX", "permits": {"days": 90, "type": "commercial", "min_usd": 1000000}} for places near a commercial permit issued in the last 90 days valued at $1M or more. days: issued in the last N days (default 365, and the answer says the window was defaulted); type: one of any, new_construction, commercial, residential, renovation, demolition, electrical, plumbing, mechanical, roofing, solar, sign, pool; min_usd: the valuation floor; metres: how close a permit must be (default 60). One city register per question, chosen from the base set\'s city, a ZIP in it, its county, or a state with one register; the cities read now: New York, NY; Los Angeles, CA; Chicago, IL; Dallas, TX; Austin, TX; San Francisco, CA; Seattle, WA; Nashville, TN. A kind or amount a city\'s register cannot tell is refused in words, never answered as any. The answer is free (counts, a preview, the price of the matching rows of our list) and its openData block names the register, its publisher, licence and when it was read. The same question on /find: …&permits=1&permits_days=90&permits_type=commercial&permits_min_usd=1000000. Not sold through a checkout yet: the answer\'s link is the page.', 'additionalProperties': False}, 'areas_in': {'type': 'object', 'required': ['by', 'ids'], 'properties': {'by': {'enum': ['county', 'zip', 'state', 'metro'], 'type': 'string'}, 'ids': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 200, 'minItems': 1, 'description': 'County FIPS, 5-digit ZIP, CBSA code or state code — the `id` of a count_by_area row'}}, 'description': 'Only rows in these areas, e.g. {"by": "county", "ids": ["18039"]} for Elkhart County, IN — the ids count_by_area returns. Rows are placed by county_fips, county + state, coordinates or ZIP, the same as count_by_area.', 'additionalProperties': False}, 'category': {'type': 'string', 'description': 'Instead of dataset: every dataset of one kind — "retail" (store chains), an industry or subcategory, or a kind of business such as "restaurant" or "bank branch" (search_datasets names these)'}, 'datasets': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 150, 'minItems': 1, 'description': 'Instead of dataset: several dataset slugs answered as one (one count, one preview, one price, one file)'}, 'order_by': {'type': 'object', 'required': ['field'], 'properties': {'field': {'type': 'string'}, 'direction': {'enum': ['asc', 'desc'], 'type': 'string', 'description': 'Default desc'}}, 'description': 'With limit: the order the slice is taken in, as a purchase takes it. Without it, nearest first with `near`, else file order.', 'additionalProperties': False}, 'area_where': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 6, 'description': 'Only rows whose county/zip/state/metro meets a Census condition, each as "<kind>:<attribute><op><value>" (ops > >= < <= =; values accept 1M, 250k, $50,000, 10%), e.g. "county:population>1000000". Every clause must hold; the fact is the area\'s, not the row\'s, and it adds nothing to the price. Attributes: population (population), households (households), median_household_income (median household income), median_age (median age), pct_65_plus (share of residents aged 65 or older), pct_bachelors_plus (share with a bachelor\'s degree or higher), housing_units (housing units), owner_occupied_share (owner-occupied share), median_home_value (median home value), establishments (business establishments), employees (employees), population_estimate (population estimate; county/metro/state only), population_growth_since_2020 (population growth since 2020; county/metro/state only); by NAICS sector, <sector>_establishments and <sector>_employees (employees: county/metro/state only) for agriculture, mining, utilities, construction, manufacturing, wholesale_trade, retail_trade, transportation, information, finance, real_estate, professional, management, administrative, educational_services, health_care, arts, accommodation, other_services; by detailed NAICS industry (1999 codes, 2 to 6 digits, the Census\'s titles), naics_<code>_establishments (county/metro/state/zip), naics_<code>_employees and naics_<code>_payroll (county/metro/state), e.g. naics_4471_establishments (gasoline stations naics 4471 establishments), naics_8111_establishments (automotive repair and maintenance establishments), naics_238990_establishments (all other specialty trade contractors naics 238990 establishments), naics_561621_establishments (security systems services except locksmiths establishments); 262 nclimdiv fields (NOAA nClimDiv county climate normals, 1991–2020, and 2025 actuals (release 2026-09-04)): january_high (January high), february_high (February high), march_high (March high), april_high (April high), may_high (May high), june_high (June high), …; 190 storms fields (NOAA Storm Events Database, 2016–2025, events a year by county): astronomical_low_tide_events (astronomical low tide events a year), avalanche_events (avalanche events a year), blizzard_events (blizzard events a year), coastal_flood_events (coastal flood events a year), cold_or_wind_chill_events (cold or wind chill events a year), debris_flow_events (debris flow events a year), …; 127 normals-annual fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): annual_cooling_degree_days_base_40 (annual cooling degree days base 40), annual_cooling_degree_days_base_45 (annual cooling degree days base 45), annual_cooling_degree_days_base_50 (annual cooling degree days base 50), annual_cooling_degree_days_base_55 (annual cooling degree days base 55), annual_cooling_degree_days_base_57 (annual cooling degree days base 57), annual_cooling_degree_days_base_60 (annual cooling degree days base 60), …; 67 normals-winter fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): winter_cooling_degree_days_base_40 (winter cooling degree days base 40), winter_cooling_degree_days_base_45 (winter cooling degree days base 45), winter_cooling_degree_days_base_50 (winter cooling degree days base 50), winter_cooling_degree_days_base_55 (winter cooling degree days base 55), winter_cooling_degree_days_base_57 (winter cooling degree days base 57), winter_cooling_degree_days_base_60 (winter cooling degree days base 60), …; 67 normals-spring fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): spring_cooling_degree_days_base_40 (spring cooling degree days base 40), spring_cooling_degree_days_base_45 (spring cooling degree days base 45), spring_cooling_degree_days_base_50 (spring cooling degree days base 50), spring_cooling_degree_days_base_55 (spring cooling degree days base 55), spring_cooling_degree_days_base_57 (spring cooling degree days base 57), spring_cooling_degree_days_base_60 (spring cooling degree days base 60), …; 67 normals-summer fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): summer_cooling_degree_days_base_40 (summer cooling degree days base 40), summer_cooling_degree_days_base_45 (summer cooling degree days base 45), summer_cooling_degree_days_base_50 (summer cooling degree days base 50), summer_cooling_degree_days_base_55 (summer cooling degree days base 55), summer_cooling_degree_days_base_57 (summer cooling degree days base 57), summer_cooling_degree_days_base_60 (summer cooling degree days base 60), …; 67 normals-fall fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): fall_cooling_degree_days_base_40 (fall cooling degree days base 40), fall_cooling_degree_days_base_45 (fall cooling degree days base 45), fall_cooling_degree_days_base_50 (fall cooling degree days base 50), fall_cooling_degree_days_base_55 (fall cooling degree days base 55), fall_cooling_degree_days_base_57 (fall cooling degree days base 57), fall_cooling_degree_days_base_60 (fall cooling degree days base 60), …; 15 hourly fields (NOAA U.S. Climate Normals 1991–2020, hourly station normals summarised over the year, by county): hourly_temperature (round the clock temperature), dew_point (dew point), sea_level_pressure (sea level pressure), cooling_degree_hours (cooling degree hours), heating_degree_hours (heating degree hours), clear_sky_share (share of clear hours), …; 51 b01001 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): pct_under_18 (share of residents aged 0 to 17), pct_5_to_14 (share of residents aged 5 to 14), b01001_001 (sex by age total), b01001_002 (sex by age male), b01001_003 (sex by age male 0 to 4 years), b01001_004 (sex by age male 5 to 9 years), …; 20 b11005 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): pct_households_with_people_under_18 (share of households with people aged 0 to 17), b11005_001 (households by presence of people 0 to 17 years by household type total), b11005_002 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years), b11005_003 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households), b11005_004 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households married-couple family), b11005_005 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households other family), …; 3 b25003 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b25003_001 (tenure total), b25003_002 (tenure owner occupied), b25003_003 (tenure renter occupied); 13 b08303 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b08303_001 (travel time to work total), b08303_002 (travel time to work 0 to 4 minutes), b08303_003 (travel time to work 5 to 9 minutes), b08303_004 (travel time to work 10 to 14 minutes), b08303_005 (travel time to work 15 to 19 minutes), b08303_006 (travel time to work 20 to 24 minutes), …; 7 b23025 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b23025_001 (employment status for the population 16 years or older total), b23025_002 (employment status for the population 16 years or older in labor force), b23025_003 (employment status for the population 16 years or older in labor force civilian labor force), b23025_004 (employment status for the population 16 years or older in labor force civilian labor force employed), b23025_005 (employment status for the population 16 years or older in labor force civilian labor force unemployed), b23025_006 (employment status for the population 16 years or older in labor force armed forces), …; 30 buildings fields (Overture Maps buildings, release 2026-08-19.0, summed per area): buildings (buildings), multi_story_buildings (multi-story buildings), mid_rise_buildings (mid-rise buildings), high_rise_buildings (high-rise buildings), buildings_2_floors_plus (buildings with 2 published floors and up), buildings_4_floors_plus (buildings with 4 published floors and up), …; 13 building-types fields (Overture Maps buildings, release 2026-08-19.0, summed per area): residential_buildings (residential buildings), outbuilding_buildings (outbuilding buildings), commercial_buildings (commercial buildings), industrial_buildings (industrial buildings), education_buildings (education buildings), agricultural_buildings (agricultural buildings), …; 43 building-classes fields (Overture Maps buildings, release 2026-08-19.0, summed per area): house_class_buildings (house class buildings), detached_class_buildings (detached class buildings), residential_class_buildings (residential class buildings), garage_class_buildings (garage class buildings), apartments_class_buildings (apartments class buildings), shed_class_buildings (shed class buildings), …; 42 building-classes-2 fields (Overture Maps buildings, release 2026-08-19.0, summed per area): religious_class_buildings (religious class buildings), civic_class_buildings (civic class buildings), fire_station_class_buildings (fire station class buildings), bungalow_class_buildings (bungalow class buildings), pavilion_class_buildings (pavilion class buildings), hut_class_buildings (hut class buildings), …; 27 building-roofs fields (Overture Maps buildings, release 2026-08-19.0, summed per area): gabled_roof_buildings (buildings with a gabled roof), flat_roof_buildings (buildings with a flat roof), hipped_roof_buildings (buildings with a hipped roof), mansard_roof_buildings (buildings with a mansard roof), round_roof_buildings (buildings with a round roof), pyramidal_roof_buildings (buildings with a pyramidal roof), …; 11 building-facades fields (Overture Maps buildings, release 2026-08-19.0, summed per area): brick_facade_buildings (buildings with a brick facade), wood_facade_buildings (buildings with a wood facade), metal_facade_buildings (buildings with a metal facade), concrete_facade_buildings (buildings with a concrete facade), plaster_facade_buildings (buildings with a plaster facade), plastic_facade_buildings (buildings with a plastic facade), ….'}, 'area_columns': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 6, 'description': 'Census and NOAA facts added to EVERY ROW as columns named <kind>_<attribute>, each as "<kind>:<attribute>,<attribute>", e.g. "county:population,median_household_income" — the county / ZIP / metro / state figures beside each location, in the preview and in the file you buy. Free. The same attribute words area_where takes (listed there).'}}, 'additionalProperties': False}
create_checkout
Create a checkout link
Opens a Stripe Checkout session for one dataset and returns the payment URL plus the session id. Give the URL to the user to pay (card, Apple Pay, Google Pay). After payment Stripe emails them a permanent download link; use check_order with the session id to confirm and fetch it. Does not charge anything by itself.
Open world
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'Dataset slug'}, 'email': {'type': 'string', 'format': 'email', 'description': 'Buyer email, if known — prefills Checkout and is where the download link is sent'}}, 'additionalProperties': False}
create_query_checkout
Card checkout for filtered rows
For buyers paying by card (no wallet needed): opens a Stripe Checkout for just the rows of one dataset that match a filter, and returns the payment URL to give the user. Takes the same filters as count_locations (state/city/county/zip, `where` on any column, `near`, `order_by`) and up to 10,000 rows. It counts the matches first, so the buyer pays only for rows that exist: the data price is the same per-row price query_locations charges, plus a card processing fee (2.9% + $0.30) added on top and shown separately. After payment the buyer is emailed a CSV download link; check_order with the session id returns it too. No match, a bad column, a distance search on a list without coordinates, or a subset that would cost more than the whole file returns an explanation and creates no checkout — nothing is charged. Agents with a USDC wallet should call query_locations instead. To cover several chains near one place, pass datasets or category and a total instead of dataset: one answer, one price and one checkout for one CSV (source_dataset names each row's dataset, duplicates removed). shape: hubspot | salesforce delivers the CSV with that CRM's import column names first (the download link also takes ?shape= later).
Open world
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'zip': {'type': 'string', 'description': 'Shortcut for where zip eq <value>'}, 'city': {'type': 'string', 'description': 'Shortcut for where city eq <value>'}, 'near': {'type': 'object', 'properties': {'lat': {'type': 'number'}, 'lng': {'type': 'number'}, 'zip': {'type': 'string', 'description': '5-digit zip'}, 'place': {'type': 'string', 'description': 'City or town with state, e.g. "Topeka, KS". A neighborhood or misspelling falls back to the nearest Census place name in that state, and the answer says which.'}, 'points': {'type': 'array', 'items': {'type': 'object', 'properties': {'lat': {'$ref': '#/properties/near/properties/lat'}, 'lng': {'$ref': '#/properties/near/properties/lng'}, 'zip': {'$ref': '#/properties/near/properties/zip'}, 'place': {'type': 'string', 'description': 'City or town with state, e.g. "Topeka, KS"'}}, 'additionalProperties': False}, 'maxItems': 10, 'minItems': 1, 'description': "Several points instead of one place/zip/lat+lng (at most 10): a row counts when it is within the radius or drive-time band of ANY of them, e.g. an operator's offices."}, 'radius_miles': {'type': 'number', 'maximum': 500, 'description': 'Only rows within this straight-line distance of the point (or of any of the points). Free.', 'exclusiveMinimum': 0}, 'drive_minutes': {'type': 'integer', 'maximum': 240, 'minimum': 5, 'description': 'Instead of radius_miles: only rows a car can reach from the point (or from any of the points) in this many minutes, typical road speeds, no live traffic. On this server: 5-60 minutes; the routing provider draws no longer band, so a 2- or 4-hour reach is not available here — use the largest band, 60 minutes, or radius_miles. One routing call per point per request; on /find it needs an issued key (radius is free). Drive time depends on an outside routing service: when an answer says drive-time search is unavailable or not switched on, ask the same question again with radius_miles (straight-line miles, always available, free).'}}, 'description': "Distance search, on lists with map coordinates (distanceSearch in search results): give ONE of place, zip, lat+lng, or `points` (several of those: within reach of ANY of them, distance to the nearest). Rows come back nearest first with a distance_miles column (straight line); combine with limit for 'the 10 closest', radius_miles for 'everything within 25 miles', or drive_minutes for 'everything within a 30-minute drive' (adds within_drive_minutes; 5-60 minutes; the routing provider draws no longer band, so a 2- or 4-hour reach is not available here — use the largest band, 60 minutes, or radius_miles). Give radius_miles or drive_minutes, not both. Rows without coordinates are excluded and counted. Drive time depends on an outside routing service: when an answer says drive-time search is unavailable or not switched on, ask the same question again with radius_miles (straight-line miles, always available, free).", 'additionalProperties': False}, 'email': {'type': 'string', 'format': 'email', 'description': 'Buyer email, if known — prefills Checkout and is where the download link is sent'}, 'limit': {'type': 'integer', 'maximum': 10000, 'minimum': 1, 'description': 'Most rows to buy (max 10,000). Default: every match up to the max. Priced on the rows that actually match, never more.'}, 'metro': {'type': 'string', 'description': 'Only rows in one metro area (CBSA): its 5-digit code ("37980") or its name ("Philadelphia", "Philadelphia, PA"). The same as areas_in {"by": "metro", "ids": [code]}: rows are placed the way count_by_area places them, so "all hospitals in the Philadelphia metro" is one count, one price and one purchase.'}, 'shape': {'enum': ['hubspot', 'salesforce'], 'type': 'string', 'description': 'CRM-ready columns: hubspot (Company name, Company domain name, Website URL, Phone number, Street address, Street address 2, City, State/Region, Postal code, Country/Region, Industry, Description) or salesforce (Name, Website, Phone, BillingStreet, BillingCity, BillingState, BillingPostalCode, BillingCountry, Industry, Description) first, then every other column of the list under its own name. Nothing is dropped; a CRM column the list lacks is present and blank.'}, 'state': {'type': 'string', 'description': 'Shortcut for where state eq <value>. Two-letter code.'}, 'total': {'type': 'integer', 'maximum': 10000, 'minimum': 1, 'description': "With datasets or category: rows wanted across all of them, split in proportion to each dataset's matches"}, 'where': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'op'], 'properties': {'op': {'enum': ['eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'in', 'contains', 'starts_with', 'is_blank', 'not_blank', 'not_contains', 'not_in', 'any_of'], 'type': 'string', 'description': "eq/ne: case-insensitive match (numeric when both sides are numbers; yes/no, true/false, y/n and 1/0 count as the same answer). gt/gte/lt/lte: numeric when value is a number, else text order (works for ISO dates). in / not_in: value is an array. contains / not_contains / starts_with: case-insensitive text. is_blank/not_blank: no value (a source's no-value marker such as <UNAVAIL> or N/A counts as blank). any_of: no value; the row is kept when ANY condition in any_of holds (e.g. brand not_in [chains] OR brand is_blank, to keep independents)."}, 'field': {'type': 'string', 'description': 'Column name as listed by get_dataset (columns[].name), e.g. revenue_amt'}, 'value': {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}, {'type': 'array', 'items': {'type': ['string', 'number']}}]}, 'any_of': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'op'], 'properties': {'op': {'enum': ['eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'in', 'contains', 'starts_with', 'is_blank', 'not_blank', 'not_contains', 'not_in', 'any_of'], 'type': 'string'}, 'field': {'type': 'string'}, 'value': {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}, {'type': 'array', 'items': {'type': ['string', 'number']}}]}}, 'additionalProperties': False}, 'maxItems': 12, 'description': 'With op any_of: the conditions, any one of which keeps the row (one level).'}}, 'additionalProperties': False}, 'maxItems': 12, 'description': 'Conditions on any column, all of which must hold. Blank cells never satisfy a comparison; the response counts rows excluded only because a tested column was blank. A small or empty answer says how many rows each condition removed and what the column really holds.'}, 'county': {'type': 'string', 'description': 'Shortcut for where county eq <value>'}, 'relate': {'type': 'object', 'additionalProperties': {}}, 'dataset': {'type': 'string', 'description': 'Dataset slug, e.g. nonprofits-va. To combine several, give datasets or category instead.'}, 'exclude': {'type': 'array', 'items': {'type': 'string'}, 'description': "With category or datasets: dataset slugs left out (a category minus one of its members, e.g. a list's competitors are its own category with itself excluded)"}, 'permits': {'type': 'object', 'properties': {'days': {'type': 'integer', 'maximum': 3650, 'minimum': 1, 'description': 'Issued in the last N days (default 365). /find: permits_days=90'}, 'type': {'enum': ['any', 'new_construction', 'commercial', 'residential', 'renovation', 'demolition', 'electrical', 'plumbing', 'mechanical', 'roofing', 'solar', 'sign', 'pool'], 'type': 'string', 'description': 'The kind of permit (default any). /find: permits_type=commercial'}, 'metres': {'type': 'integer', 'maximum': 200, 'minimum': 10, 'description': 'How close a permit must be to the row, in metres (default 60). /find: permits_m=60'}, 'min_usd': {'type': 'number', 'minimum': 0, 'description': 'Valuation at least this many dollars, e.g. 1000000. /find: permits_min_usd=1000000'}}, 'description': 'Only rows with a BUILDING PERMIT nearby, read live from the city\'s own permit register at question time — e.g. {"dataset": "<slug>", "city": "Austin", "state": "TX", "permits": {"days": 90, "type": "commercial", "min_usd": 1000000}} for places near a commercial permit issued in the last 90 days valued at $1M or more. days: issued in the last N days (default 365, and the answer says the window was defaulted); type: one of any, new_construction, commercial, residential, renovation, demolition, electrical, plumbing, mechanical, roofing, solar, sign, pool; min_usd: the valuation floor; metres: how close a permit must be (default 60). One city register per question, chosen from the base set\'s city, a ZIP in it, its county, or a state with one register; the cities read now: New York, NY; Los Angeles, CA; Chicago, IL; Dallas, TX; Austin, TX; San Francisco, CA; Seattle, WA; Nashville, TN. A kind or amount a city\'s register cannot tell is refused in words, never answered as any. The answer is free (counts, a preview, the price of the matching rows of our list) and its openData block names the register, its publisher, licence and when it was read. The same question on /find: …&permits=1&permits_days=90&permits_type=commercial&permits_min_usd=1000000. Not sold through a checkout yet: the answer\'s link is the page.', 'additionalProperties': False}, 'areas_in': {'type': 'object', 'required': ['by', 'ids'], 'properties': {'by': {'enum': ['county', 'zip', 'state', 'metro'], 'type': 'string'}, 'ids': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 200, 'minItems': 1, 'description': 'County FIPS, 5-digit ZIP, CBSA code or state code — the `id` of a count_by_area row'}}, 'description': 'Only rows in these areas, e.g. {"by": "county", "ids": ["18039"]} for Elkhart County, IN — the ids count_by_area returns. Rows are placed by county_fips, county + state, coordinates or ZIP, the same as count_by_area.', 'additionalProperties': False}, 'category': {'type': 'string', 'description': 'Instead of dataset: every dataset of one kind — "retail" (store chains), an industry or subcategory, or a kind of business such as "restaurant" or "bank branch" (search_datasets names these)'}, 'datasets': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 150, 'minItems': 1, 'description': 'Instead of dataset: several dataset slugs answered as one (one count, one preview, one price, one file)'}, 'order_by': {'type': 'object', 'required': ['field'], 'properties': {'field': {'type': 'string'}, 'direction': {'enum': ['asc', 'desc'], 'type': 'string', 'description': 'Default desc'}}, 'description': "Return the top rows by one column, e.g. {field: 'revenue_amt'} for the largest first. Blanks sort last.", 'additionalProperties': False}, 'area_where': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 6, 'description': 'Only rows whose county/zip/state/metro meets a Census condition, each as "<kind>:<attribute><op><value>" (ops > >= < <= =; values accept 1M, 250k, $50,000, 10%), e.g. "county:population>1000000". Every clause must hold; the fact is the area\'s, not the row\'s, and it adds nothing to the price. Attributes: population (population), households (households), median_household_income (median household income), median_age (median age), pct_65_plus (share of residents aged 65 or older), pct_bachelors_plus (share with a bachelor\'s degree or higher), housing_units (housing units), owner_occupied_share (owner-occupied share), median_home_value (median home value), establishments (business establishments), employees (employees), population_estimate (population estimate; county/metro/state only), population_growth_since_2020 (population growth since 2020; county/metro/state only); by NAICS sector, <sector>_establishments and <sector>_employees (employees: county/metro/state only) for agriculture, mining, utilities, construction, manufacturing, wholesale_trade, retail_trade, transportation, information, finance, real_estate, professional, management, administrative, educational_services, health_care, arts, accommodation, other_services; by detailed NAICS industry (1999 codes, 2 to 6 digits, the Census\'s titles), naics_<code>_establishments (county/metro/state/zip), naics_<code>_employees and naics_<code>_payroll (county/metro/state), e.g. naics_4471_establishments (gasoline stations naics 4471 establishments), naics_8111_establishments (automotive repair and maintenance establishments), naics_238990_establishments (all other specialty trade contractors naics 238990 establishments), naics_561621_establishments (security systems services except locksmiths establishments); 262 nclimdiv fields (NOAA nClimDiv county climate normals, 1991–2020, and 2025 actuals (release 2026-09-04)): january_high (January high), february_high (February high), march_high (March high), april_high (April high), may_high (May high), june_high (June high), …; 190 storms fields (NOAA Storm Events Database, 2016–2025, events a year by county): astronomical_low_tide_events (astronomical low tide events a year), avalanche_events (avalanche events a year), blizzard_events (blizzard events a year), coastal_flood_events (coastal flood events a year), cold_or_wind_chill_events (cold or wind chill events a year), debris_flow_events (debris flow events a year), …; 127 normals-annual fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): annual_cooling_degree_days_base_40 (annual cooling degree days base 40), annual_cooling_degree_days_base_45 (annual cooling degree days base 45), annual_cooling_degree_days_base_50 (annual cooling degree days base 50), annual_cooling_degree_days_base_55 (annual cooling degree days base 55), annual_cooling_degree_days_base_57 (annual cooling degree days base 57), annual_cooling_degree_days_base_60 (annual cooling degree days base 60), …; 67 normals-winter fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): winter_cooling_degree_days_base_40 (winter cooling degree days base 40), winter_cooling_degree_days_base_45 (winter cooling degree days base 45), winter_cooling_degree_days_base_50 (winter cooling degree days base 50), winter_cooling_degree_days_base_55 (winter cooling degree days base 55), winter_cooling_degree_days_base_57 (winter cooling degree days base 57), winter_cooling_degree_days_base_60 (winter cooling degree days base 60), …; 67 normals-spring fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): spring_cooling_degree_days_base_40 (spring cooling degree days base 40), spring_cooling_degree_days_base_45 (spring cooling degree days base 45), spring_cooling_degree_days_base_50 (spring cooling degree days base 50), spring_cooling_degree_days_base_55 (spring cooling degree days base 55), spring_cooling_degree_days_base_57 (spring cooling degree days base 57), spring_cooling_degree_days_base_60 (spring cooling degree days base 60), …; 67 normals-summer fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): summer_cooling_degree_days_base_40 (summer cooling degree days base 40), summer_cooling_degree_days_base_45 (summer cooling degree days base 45), summer_cooling_degree_days_base_50 (summer cooling degree days base 50), summer_cooling_degree_days_base_55 (summer cooling degree days base 55), summer_cooling_degree_days_base_57 (summer cooling degree days base 57), summer_cooling_degree_days_base_60 (summer cooling degree days base 60), …; 67 normals-fall fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): fall_cooling_degree_days_base_40 (fall cooling degree days base 40), fall_cooling_degree_days_base_45 (fall cooling degree days base 45), fall_cooling_degree_days_base_50 (fall cooling degree days base 50), fall_cooling_degree_days_base_55 (fall cooling degree days base 55), fall_cooling_degree_days_base_57 (fall cooling degree days base 57), fall_cooling_degree_days_base_60 (fall cooling degree days base 60), …; 15 hourly fields (NOAA U.S. Climate Normals 1991–2020, hourly station normals summarised over the year, by county): hourly_temperature (round the clock temperature), dew_point (dew point), sea_level_pressure (sea level pressure), cooling_degree_hours (cooling degree hours), heating_degree_hours (heating degree hours), clear_sky_share (share of clear hours), …; 51 b01001 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): pct_under_18 (share of residents aged 0 to 17), pct_5_to_14 (share of residents aged 5 to 14), b01001_001 (sex by age total), b01001_002 (sex by age male), b01001_003 (sex by age male 0 to 4 years), b01001_004 (sex by age male 5 to 9 years), …; 20 b11005 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): pct_households_with_people_under_18 (share of households with people aged 0 to 17), b11005_001 (households by presence of people 0 to 17 years by household type total), b11005_002 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years), b11005_003 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households), b11005_004 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households married-couple family), b11005_005 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households other family), …; 3 b25003 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b25003_001 (tenure total), b25003_002 (tenure owner occupied), b25003_003 (tenure renter occupied); 13 b08303 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b08303_001 (travel time to work total), b08303_002 (travel time to work 0 to 4 minutes), b08303_003 (travel time to work 5 to 9 minutes), b08303_004 (travel time to work 10 to 14 minutes), b08303_005 (travel time to work 15 to 19 minutes), b08303_006 (travel time to work 20 to 24 minutes), …; 7 b23025 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b23025_001 (employment status for the population 16 years or older total), b23025_002 (employment status for the population 16 years or older in labor force), b23025_003 (employment status for the population 16 years or older in labor force civilian labor force), b23025_004 (employment status for the population 16 years or older in labor force civilian labor force employed), b23025_005 (employment status for the population 16 years or older in labor force civilian labor force unemployed), b23025_006 (employment status for the population 16 years or older in labor force armed forces), …; 30 buildings fields (Overture Maps buildings, release 2026-08-19.0, summed per area): buildings (buildings), multi_story_buildings (multi-story buildings), mid_rise_buildings (mid-rise buildings), high_rise_buildings (high-rise buildings), buildings_2_floors_plus (buildings with 2 published floors and up), buildings_4_floors_plus (buildings with 4 published floors and up), …; 13 building-types fields (Overture Maps buildings, release 2026-08-19.0, summed per area): residential_buildings (residential buildings), outbuilding_buildings (outbuilding buildings), commercial_buildings (commercial buildings), industrial_buildings (industrial buildings), education_buildings (education buildings), agricultural_buildings (agricultural buildings), …; 43 building-classes fields (Overture Maps buildings, release 2026-08-19.0, summed per area): house_class_buildings (house class buildings), detached_class_buildings (detached class buildings), residential_class_buildings (residential class buildings), garage_class_buildings (garage class buildings), apartments_class_buildings (apartments class buildings), shed_class_buildings (shed class buildings), …; 42 building-classes-2 fields (Overture Maps buildings, release 2026-08-19.0, summed per area): religious_class_buildings (religious class buildings), civic_class_buildings (civic class buildings), fire_station_class_buildings (fire station class buildings), bungalow_class_buildings (bungalow class buildings), pavilion_class_buildings (pavilion class buildings), hut_class_buildings (hut class buildings), …; 27 building-roofs fields (Overture Maps buildings, release 2026-08-19.0, summed per area): gabled_roof_buildings (buildings with a gabled roof), flat_roof_buildings (buildings with a flat roof), hipped_roof_buildings (buildings with a hipped roof), mansard_roof_buildings (buildings with a mansard roof), round_roof_buildings (buildings with a round roof), pyramidal_roof_buildings (buildings with a pyramidal roof), …; 11 building-facades fields (Overture Maps buildings, release 2026-08-19.0, summed per area): brick_facade_buildings (buildings with a brick facade), wood_facade_buildings (buildings with a wood facade), metal_facade_buildings (buildings with a metal facade), concrete_facade_buildings (buildings with a concrete facade), plaster_facade_buildings (buildings with a plaster facade), plastic_facade_buildings (buildings with a plastic facade), ….'}, 'area_columns': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 6, 'description': 'Census and NOAA facts added to EVERY ROW as columns named <kind>_<attribute>, each as "<kind>:<attribute>,<attribute>", e.g. "county:population,median_household_income" — the county / ZIP / metro / state figures beside each location, in the preview and in the file you buy. Free. The same attribute words area_where takes (listed there).'}}, 'additionalProperties': False}
email_quote
Email the user a quote (free)
Free. Emails the user a plain-English quote for exactly this request: how many rows match, the card price, a few of the matches and a card checkout link, so they can pay later, from any device, or forward it to whoever holds the card. Takes the same arguments as count_locations: dataset, or datasets / category with total, plus filters. BEFORE calling: ask the user for their email and whether to send it. Pass an email only if the user gave it to you in this conversation; never guess or invent one. Nothing is charged and nothing is bought; the price is checked again when they open the link.
Open world
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['email'], 'properties': {'zip': {'type': 'string', 'description': 'Shortcut for where zip eq <value>'}, 'city': {'type': 'string', 'description': 'Shortcut for where city eq <value>'}, 'near': {'type': 'object', 'properties': {'lat': {'type': 'number'}, 'lng': {'type': 'number'}, 'zip': {'type': 'string', 'description': '5-digit zip'}, 'place': {'type': 'string', 'description': 'City or town with state, e.g. "Topeka, KS". A neighborhood or misspelling falls back to the nearest Census place name in that state, and the answer says which.'}, 'points': {'type': 'array', 'items': {'type': 'object', 'properties': {'lat': {'$ref': '#/properties/near/properties/lat'}, 'lng': {'$ref': '#/properties/near/properties/lng'}, 'zip': {'$ref': '#/properties/near/properties/zip'}, 'place': {'type': 'string', 'description': 'City or town with state, e.g. "Topeka, KS"'}}, 'additionalProperties': False}, 'maxItems': 10, 'minItems': 1, 'description': "Several points instead of one place/zip/lat+lng (at most 10): a row counts when it is within the radius or drive-time band of ANY of them, e.g. an operator's offices."}, 'radius_miles': {'type': 'number', 'maximum': 500, 'description': 'Only rows within this straight-line distance of the point (or of any of the points). Free.', 'exclusiveMinimum': 0}, 'drive_minutes': {'type': 'integer', 'maximum': 240, 'minimum': 5, 'description': 'Instead of radius_miles: only rows a car can reach from the point (or from any of the points) in this many minutes, typical road speeds, no live traffic. On this server: 5-60 minutes; the routing provider draws no longer band, so a 2- or 4-hour reach is not available here — use the largest band, 60 minutes, or radius_miles. One routing call per point per request; on /find it needs an issued key (radius is free). Drive time depends on an outside routing service: when an answer says drive-time search is unavailable or not switched on, ask the same question again with radius_miles (straight-line miles, always available, free).'}}, 'description': "Distance search, on lists with map coordinates (distanceSearch in search results): give ONE of place, zip, lat+lng, or `points` (several of those: within reach of ANY of them, distance to the nearest). Rows come back nearest first with a distance_miles column (straight line); combine with limit for 'the 10 closest', radius_miles for 'everything within 25 miles', or drive_minutes for 'everything within a 30-minute drive' (adds within_drive_minutes; 5-60 minutes; the routing provider draws no longer band, so a 2- or 4-hour reach is not available here — use the largest band, 60 minutes, or radius_miles). Give radius_miles or drive_minutes, not both. Rows without coordinates are excluded and counted. Drive time depends on an outside routing service: when an answer says drive-time search is unavailable or not switched on, ask the same question again with radius_miles (straight-line miles, always available, free).", 'additionalProperties': False}, 'email': {'type': 'string', 'description': "The user's email, as they gave it"}, 'metro': {'type': 'string', 'description': 'Only rows in one metro area (CBSA): its 5-digit code ("37980") or its name ("Philadelphia", "Philadelphia, PA"). The same as areas_in {"by": "metro", "ids": [code]}: rows are placed the way count_by_area places them, so "all hospitals in the Philadelphia metro" is one count, one price and one purchase.'}, 'state': {'type': 'string', 'description': 'Shortcut for where state eq <value>. Two-letter code.'}, 'total': {'type': 'integer', 'maximum': 10000, 'minimum': 1, 'description': "With datasets or category: rows wanted across all of them, split in proportion to each dataset's matches"}, 'where': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'op'], 'properties': {'op': {'enum': ['eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'in', 'contains', 'starts_with', 'is_blank', 'not_blank', 'not_contains', 'not_in', 'any_of'], 'type': 'string', 'description': "eq/ne: case-insensitive match (numeric when both sides are numbers; yes/no, true/false, y/n and 1/0 count as the same answer). gt/gte/lt/lte: numeric when value is a number, else text order (works for ISO dates). in / not_in: value is an array. contains / not_contains / starts_with: case-insensitive text. is_blank/not_blank: no value (a source's no-value marker such as <UNAVAIL> or N/A counts as blank). any_of: no value; the row is kept when ANY condition in any_of holds (e.g. brand not_in [chains] OR brand is_blank, to keep independents)."}, 'field': {'type': 'string', 'description': 'Column name as listed by get_dataset (columns[].name), e.g. revenue_amt'}, 'value': {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}, {'type': 'array', 'items': {'type': ['string', 'number']}}]}, 'any_of': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'op'], 'properties': {'op': {'enum': ['eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'in', 'contains', 'starts_with', 'is_blank', 'not_blank', 'not_contains', 'not_in', 'any_of'], 'type': 'string'}, 'field': {'type': 'string'}, 'value': {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}, {'type': 'array', 'items': {'type': ['string', 'number']}}]}}, 'additionalProperties': False}, 'maxItems': 12, 'description': 'With op any_of: the conditions, any one of which keeps the row (one level).'}}, 'additionalProperties': False}, 'maxItems': 12, 'description': 'Conditions on any column, all of which must hold. Blank cells never satisfy a comparison; the response counts rows excluded only because a tested column was blank. A small or empty answer says how many rows each condition removed and what the column really holds.'}, 'county': {'type': 'string', 'description': 'Shortcut for where county eq <value>'}, 'dataset': {'type': 'string', 'description': 'Dataset slug, e.g. nonprofits-va. To combine several, give datasets or category instead.'}, 'exclude': {'type': 'array', 'items': {'type': 'string'}, 'description': "With category or datasets: dataset slugs left out (a category minus one of its members, e.g. a list's competitors are its own category with itself excluded)"}, 'permits': {'type': 'object', 'properties': {'days': {'type': 'integer', 'maximum': 3650, 'minimum': 1, 'description': 'Issued in the last N days (default 365). /find: permits_days=90'}, 'type': {'enum': ['any', 'new_construction', 'commercial', 'residential', 'renovation', 'demolition', 'electrical', 'plumbing', 'mechanical', 'roofing', 'solar', 'sign', 'pool'], 'type': 'string', 'description': 'The kind of permit (default any). /find: permits_type=commercial'}, 'metres': {'type': 'integer', 'maximum': 200, 'minimum': 10, 'description': 'How close a permit must be to the row, in metres (default 60). /find: permits_m=60'}, 'min_usd': {'type': 'number', 'minimum': 0, 'description': 'Valuation at least this many dollars, e.g. 1000000. /find: permits_min_usd=1000000'}}, 'description': 'Only rows with a BUILDING PERMIT nearby, read live from the city\'s own permit register at question time — e.g. {"dataset": "<slug>", "city": "Austin", "state": "TX", "permits": {"days": 90, "type": "commercial", "min_usd": 1000000}} for places near a commercial permit issued in the last 90 days valued at $1M or more. days: issued in the last N days (default 365, and the answer says the window was defaulted); type: one of any, new_construction, commercial, residential, renovation, demolition, electrical, plumbing, mechanical, roofing, solar, sign, pool; min_usd: the valuation floor; metres: how close a permit must be (default 60). One city register per question, chosen from the base set\'s city, a ZIP in it, its county, or a state with one register; the cities read now: New York, NY; Los Angeles, CA; Chicago, IL; Dallas, TX; Austin, TX; San Francisco, CA; Seattle, WA; Nashville, TN. A kind or amount a city\'s register cannot tell is refused in words, never answered as any. The answer is free (counts, a preview, the price of the matching rows of our list) and its openData block names the register, its publisher, licence and when it was read. The same question on /find: …&permits=1&permits_days=90&permits_type=commercial&permits_min_usd=1000000. Not sold through a checkout yet: the answer\'s link is the page.', 'additionalProperties': False}, 'areas_in': {'type': 'object', 'required': ['by', 'ids'], 'properties': {'by': {'enum': ['county', 'zip', 'state', 'metro'], 'type': 'string'}, 'ids': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 200, 'minItems': 1, 'description': 'County FIPS, 5-digit ZIP, CBSA code or state code — the `id` of a count_by_area row'}}, 'description': 'Only rows in these areas, e.g. {"by": "county", "ids": ["18039"]} for Elkhart County, IN — the ids count_by_area returns. Rows are placed by county_fips, county + state, coordinates or ZIP, the same as count_by_area.', 'additionalProperties': False}, 'category': {'type': 'string', 'description': 'Instead of dataset: every dataset of one kind — "retail" (store chains), an industry or subcategory, or a kind of business such as "restaurant" or "bank branch" (search_datasets names these)'}, 'datasets': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 150, 'minItems': 1, 'description': 'Instead of dataset: several dataset slugs answered as one (one count, one preview, one price, one file)'}, 'area_where': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 6, 'description': 'Only rows whose county/zip/state/metro meets a Census condition, each as "<kind>:<attribute><op><value>" (ops > >= < <= =; values accept 1M, 250k, $50,000, 10%), e.g. "county:population>1000000". Every clause must hold; the fact is the area\'s, not the row\'s, and it adds nothing to the price. Attributes: population (population), households (households), median_household_income (median household income), median_age (median age), pct_65_plus (share of residents aged 65 or older), pct_bachelors_plus (share with a bachelor\'s degree or higher), housing_units (housing units), owner_occupied_share (owner-occupied share), median_home_value (median home value), establishments (business establishments), employees (employees), population_estimate (population estimate; county/metro/state only), population_growth_since_2020 (population growth since 2020; county/metro/state only); by NAICS sector, <sector>_establishments and <sector>_employees (employees: county/metro/state only) for agriculture, mining, utilities, construction, manufacturing, wholesale_trade, retail_trade, transportation, information, finance, real_estate, professional, management, administrative, educational_services, health_care, arts, accommodation, other_services; by detailed NAICS industry (1999 codes, 2 to 6 digits, the Census\'s titles), naics_<code>_establishments (county/metro/state/zip), naics_<code>_employees and naics_<code>_payroll (county/metro/state), e.g. naics_4471_establishments (gasoline stations naics 4471 establishments), naics_8111_establishments (automotive repair and maintenance establishments), naics_238990_establishments (all other specialty trade contractors naics 238990 establishments), naics_561621_establishments (security systems services except locksmiths establishments); 262 nclimdiv fields (NOAA nClimDiv county climate normals, 1991–2020, and 2025 actuals (release 2026-09-04)): january_high (January high), february_high (February high), march_high (March high), april_high (April high), may_high (May high), june_high (June high), …; 190 storms fields (NOAA Storm Events Database, 2016–2025, events a year by county): astronomical_low_tide_events (astronomical low tide events a year), avalanche_events (avalanche events a year), blizzard_events (blizzard events a year), coastal_flood_events (coastal flood events a year), cold_or_wind_chill_events (cold or wind chill events a year), debris_flow_events (debris flow events a year), …; 127 normals-annual fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): annual_cooling_degree_days_base_40 (annual cooling degree days base 40), annual_cooling_degree_days_base_45 (annual cooling degree days base 45), annual_cooling_degree_days_base_50 (annual cooling degree days base 50), annual_cooling_degree_days_base_55 (annual cooling degree days base 55), annual_cooling_degree_days_base_57 (annual cooling degree days base 57), annual_cooling_degree_days_base_60 (annual cooling degree days base 60), …; 67 normals-winter fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): winter_cooling_degree_days_base_40 (winter cooling degree days base 40), winter_cooling_degree_days_base_45 (winter cooling degree days base 45), winter_cooling_degree_days_base_50 (winter cooling degree days base 50), winter_cooling_degree_days_base_55 (winter cooling degree days base 55), winter_cooling_degree_days_base_57 (winter cooling degree days base 57), winter_cooling_degree_days_base_60 (winter cooling degree days base 60), …; 67 normals-spring fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): spring_cooling_degree_days_base_40 (spring cooling degree days base 40), spring_cooling_degree_days_base_45 (spring cooling degree days base 45), spring_cooling_degree_days_base_50 (spring cooling degree days base 50), spring_cooling_degree_days_base_55 (spring cooling degree days base 55), spring_cooling_degree_days_base_57 (spring cooling degree days base 57), spring_cooling_degree_days_base_60 (spring cooling degree days base 60), …; 67 normals-summer fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): summer_cooling_degree_days_base_40 (summer cooling degree days base 40), summer_cooling_degree_days_base_45 (summer cooling degree days base 45), summer_cooling_degree_days_base_50 (summer cooling degree days base 50), summer_cooling_degree_days_base_55 (summer cooling degree days base 55), summer_cooling_degree_days_base_57 (summer cooling degree days base 57), summer_cooling_degree_days_base_60 (summer cooling degree days base 60), …; 67 normals-fall fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): fall_cooling_degree_days_base_40 (fall cooling degree days base 40), fall_cooling_degree_days_base_45 (fall cooling degree days base 45), fall_cooling_degree_days_base_50 (fall cooling degree days base 50), fall_cooling_degree_days_base_55 (fall cooling degree days base 55), fall_cooling_degree_days_base_57 (fall cooling degree days base 57), fall_cooling_degree_days_base_60 (fall cooling degree days base 60), …; 15 hourly fields (NOAA U.S. Climate Normals 1991–2020, hourly station normals summarised over the year, by county): hourly_temperature (round the clock temperature), dew_point (dew point), sea_level_pressure (sea level pressure), cooling_degree_hours (cooling degree hours), heating_degree_hours (heating degree hours), clear_sky_share (share of clear hours), …; 51 b01001 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): pct_under_18 (share of residents aged 0 to 17), pct_5_to_14 (share of residents aged 5 to 14), b01001_001 (sex by age total), b01001_002 (sex by age male), b01001_003 (sex by age male 0 to 4 years), b01001_004 (sex by age male 5 to 9 years), …; 20 b11005 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): pct_households_with_people_under_18 (share of households with people aged 0 to 17), b11005_001 (households by presence of people 0 to 17 years by household type total), b11005_002 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years), b11005_003 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households), b11005_004 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households married-couple family), b11005_005 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households other family), …; 3 b25003 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b25003_001 (tenure total), b25003_002 (tenure owner occupied), b25003_003 (tenure renter occupied); 13 b08303 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b08303_001 (travel time to work total), b08303_002 (travel time to work 0 to 4 minutes), b08303_003 (travel time to work 5 to 9 minutes), b08303_004 (travel time to work 10 to 14 minutes), b08303_005 (travel time to work 15 to 19 minutes), b08303_006 (travel time to work 20 to 24 minutes), …; 7 b23025 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b23025_001 (employment status for the population 16 years or older total), b23025_002 (employment status for the population 16 years or older in labor force), b23025_003 (employment status for the population 16 years or older in labor force civilian labor force), b23025_004 (employment status for the population 16 years or older in labor force civilian labor force employed), b23025_005 (employment status for the population 16 years or older in labor force civilian labor force unemployed), b23025_006 (employment status for the population 16 years or older in labor force armed forces), …; 30 buildings fields (Overture Maps buildings, release 2026-08-19.0, summed per area): buildings (buildings), multi_story_buildings (multi-story buildings), mid_rise_buildings (mid-rise buildings), high_rise_buildings (high-rise buildings), buildings_2_floors_plus (buildings with 2 published floors and up), buildings_4_floors_plus (buildings with 4 published floors and up), …; 13 building-types fields (Overture Maps buildings, release 2026-08-19.0, summed per area): residential_buildings (residential buildings), outbuilding_buildings (outbuilding buildings), commercial_buildings (commercial buildings), industrial_buildings (industrial buildings), education_buildings (education buildings), agricultural_buildings (agricultural buildings), …; 43 building-classes fields (Overture Maps buildings, release 2026-08-19.0, summed per area): house_class_buildings (house class buildings), detached_class_buildings (detached class buildings), residential_class_buildings (residential class buildings), garage_class_buildings (garage class buildings), apartments_class_buildings (apartments class buildings), shed_class_buildings (shed class buildings), …; 42 building-classes-2 fields (Overture Maps buildings, release 2026-08-19.0, summed per area): religious_class_buildings (religious class buildings), civic_class_buildings (civic class buildings), fire_station_class_buildings (fire station class buildings), bungalow_class_buildings (bungalow class buildings), pavilion_class_buildings (pavilion class buildings), hut_class_buildings (hut class buildings), …; 27 building-roofs fields (Overture Maps buildings, release 2026-08-19.0, summed per area): gabled_roof_buildings (buildings with a gabled roof), flat_roof_buildings (buildings with a flat roof), hipped_roof_buildings (buildings with a hipped roof), mansard_roof_buildings (buildings with a mansard roof), round_roof_buildings (buildings with a round roof), pyramidal_roof_buildings (buildings with a pyramidal roof), …; 11 building-facades fields (Overture Maps buildings, release 2026-08-19.0, summed per area): brick_facade_buildings (buildings with a brick facade), wood_facade_buildings (buildings with a wood facade), metal_facade_buildings (buildings with a metal facade), concrete_facade_buildings (buildings with a concrete facade), plaster_facade_buildings (buildings with a plaster facade), plastic_facade_buildings (buildings with a plastic facade), ….'}, 'area_columns': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 6, 'description': 'Census and NOAA facts added to EVERY ROW as columns named <kind>_<attribute>, each as "<kind>:<attribute>,<attribute>", e.g. "county:population,median_household_income" — the county / ZIP / metro / state figures beside each location, in the preview and in the file you buy. Free. The same attribute words area_where takes (listed there).'}}, 'additionalProperties': False}
get_dataset
Get dataset details
Full record for one dataset: fields with descriptions, record and state counts, coverage measured on the rows (a list in 14 states says "partial U.S.: 14 states"; coverageDetail lists the states, rows per state and the states with none), whether it can be searched by distance, advertised refresh cadence AND the real last-modified date of the file, FAQs, sample URL and the dataset's page on locationlists.com.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'Dataset slug from search_datasets, e.g. bobcat-dealers'}}, 'additionalProperties': False}
get_quote
Price one or more datasets
Line-item prices and total for a list of dataset slugs, each with how it is sold (soldBy: file, row, or both) — the same rule create_checkout, buy_dataset, create_query_checkout and query_locations enforce, so a quote never offers a route checkout refuses. A list sold by the row only (an Overture Maps list) is quoted at its per-row rate with the route named, not as a file; count_locations with filters gives the exact price of the rows. Every list sold by the row is quoted with its perRow rate and the per-call fee, next to any file price. A paid call is billed for the rows it returns: each row at its own list's per-row rate (an Overture open-data row at $0.005; a row of a chain LocationLists sells its own list for, at that list's rate), plus a $0.01 per-call fee, rounded once to the nearest cent, at least $0.02, never more than the whole list. count_locations with the same filters, limit and offset quotes exactly that page, row source by row source (price.breakdown), before anything is paid. How a list is sold: our own lists are sold as a whole file (create_checkout / buy_dataset), and those of 5,000 records or more are also sold by the row (query_locations / create_query_checkout); smaller lists are sold whole only. Overture Maps lists (slugs starting overture-) are sold by the row ONLY, at any size — there is no file to buy. If a bundle covers several requested brands for less, it says so.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slugs'], 'properties': {'slugs': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 50, 'minItems': 1, 'description': 'Dataset slugs'}}, 'additionalProperties': False}
get_sample
Get sample rows
Free. Real rows from the live file, as JSON plus CSV text. Show these to the user so they can judge the fields and quality. Without filters: up to 10 rows spread across the whole dataset. With filters (the same ones count_locations takes: city, state, county, zip, metro, `where` on any column, areas_in (county / ZIP / metro / state ids from count_by_area), area_where, area_columns (Census figures as columns on every row), or `near` a place such as {place: "Los Angeles, CA", radius_miles: 25} or {place: "Richmond, VA", drive_minutes: 30} on lists with coordinates): how many rows match, plus the list's FIXED free sample rows — the same published rows whatever the filter, each marked matches_your_question, the ones this filter matched FIRST (default 3 rows; rows up to the published sample's size shows them all, and samplePublished / sampleMatched say how many that is) — so the user can see real stores and the real column shape before deciding, with the exact count and price of the matches. The rows shown are fixed per list so that free answers cannot be composed into the file; the count, the coverage, the columns and the price are exact for the filter. To see what KINDS of place make up a count in an area (dealers vs manufacturers, say), use count_by_area with top_values on a class column. The result's `next` says exactly how to get every matching row. To preview several chains at once, pass datasets or category (e.g. "retail" or "restaurant") instead of slug: one combined answer with counts per dataset, duplicates removed and up to 3 rows across them. shape: hubspot | salesforce returns the same rows with that CRM's import column names first (the exact header row the paid file will have with the same shape), every other column after.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'zip': {'type': 'string', 'description': 'Shortcut for where zip eq <value>'}, 'city': {'type': 'string', 'description': 'Shortcut for where city eq <value>'}, 'near': {'type': 'object', 'properties': {'lat': {'type': 'number'}, 'lng': {'type': 'number'}, 'zip': {'type': 'string', 'description': '5-digit zip'}, 'place': {'type': 'string', 'description': 'City or town with state, e.g. "Topeka, KS". A neighborhood or misspelling falls back to the nearest Census place name in that state, and the answer says which.'}, 'points': {'type': 'array', 'items': {'type': 'object', 'properties': {'lat': {'$ref': '#/properties/near/properties/lat'}, 'lng': {'$ref': '#/properties/near/properties/lng'}, 'zip': {'$ref': '#/properties/near/properties/zip'}, 'place': {'type': 'string', 'description': 'City or town with state, e.g. "Topeka, KS"'}}, 'additionalProperties': False}, 'maxItems': 10, 'minItems': 1, 'description': "Several points instead of one place/zip/lat+lng (at most 10): a row counts when it is within the radius or drive-time band of ANY of them, e.g. an operator's offices."}, 'radius_miles': {'type': 'number', 'maximum': 500, 'description': 'Only rows within this straight-line distance of the point (or of any of the points). Free.', 'exclusiveMinimum': 0}, 'drive_minutes': {'type': 'integer', 'maximum': 240, 'minimum': 5, 'description': 'Instead of radius_miles: only rows a car can reach from the point (or from any of the points) in this many minutes, typical road speeds, no live traffic. On this server: 5-60 minutes; the routing provider draws no longer band, so a 2- or 4-hour reach is not available here — use the largest band, 60 minutes, or radius_miles. One routing call per point per request; on /find it needs an issued key (radius is free). Drive time depends on an outside routing service: when an answer says drive-time search is unavailable or not switched on, ask the same question again with radius_miles (straight-line miles, always available, free).'}}, 'description': "Distance search, on lists with map coordinates (distanceSearch in search results): give ONE of place, zip, lat+lng, or `points` (several of those: within reach of ANY of them, distance to the nearest). Rows come back nearest first with a distance_miles column (straight line); combine with limit for 'the 10 closest', radius_miles for 'everything within 25 miles', or drive_minutes for 'everything within a 30-minute drive' (adds within_drive_minutes; 5-60 minutes; the routing provider draws no longer band, so a 2- or 4-hour reach is not available here — use the largest band, 60 minutes, or radius_miles). Give radius_miles or drive_minutes, not both. Rows without coordinates are excluded and counted. Drive time depends on an outside routing service: when an answer says drive-time search is unavailable or not switched on, ask the same question again with radius_miles (straight-line miles, always available, free).", 'additionalProperties': False}, 'rows': {'type': 'integer', 'maximum': 10, 'minimum': 1, 'description': "Rows to return (default 10; with filters default 3, up to the published sample's size — samplePublished in the answer)"}, 'slug': {'type': 'string', 'description': 'Dataset slug. Or datasets / category to preview several at once.'}, 'metro': {'type': 'string', 'description': 'Only rows in one metro area (CBSA): its 5-digit code ("37980") or its name ("Philadelphia", "Philadelphia, PA"). The same as areas_in {"by": "metro", "ids": [code]}: rows are placed the way count_by_area places them, so "all hospitals in the Philadelphia metro" is one count, one price and one purchase.'}, 'shape': {'enum': ['hubspot', 'salesforce'], 'type': 'string', 'description': 'CRM-ready columns: hubspot (Company name, Company domain name, Website URL, Phone number, Street address, Street address 2, City, State/Region, Postal code, Country/Region, Industry, Description) or salesforce (Name, Website, Phone, BillingStreet, BillingCity, BillingState, BillingPostalCode, BillingCountry, Industry, Description) first, then every other column of the list under its own name. Nothing is dropped; a CRM column the list lacks is present and blank.'}, 'state': {'type': 'string', 'description': 'Shortcut for where state eq <value>. Two-letter code.'}, 'total': {'type': 'integer', 'maximum': 10000, 'minimum': 1, 'description': "With datasets or category: rows wanted across all of them, split in proportion to each dataset's matches"}, 'where': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'op'], 'properties': {'op': {'enum': ['eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'in', 'contains', 'starts_with', 'is_blank', 'not_blank', 'not_contains', 'not_in', 'any_of'], 'type': 'string', 'description': "eq/ne: case-insensitive match (numeric when both sides are numbers; yes/no, true/false, y/n and 1/0 count as the same answer). gt/gte/lt/lte: numeric when value is a number, else text order (works for ISO dates). in / not_in: value is an array. contains / not_contains / starts_with: case-insensitive text. is_blank/not_blank: no value (a source's no-value marker such as <UNAVAIL> or N/A counts as blank). any_of: no value; the row is kept when ANY condition in any_of holds (e.g. brand not_in [chains] OR brand is_blank, to keep independents)."}, 'field': {'type': 'string', 'description': 'Column name as listed by get_dataset (columns[].name), e.g. revenue_amt'}, 'value': {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}, {'type': 'array', 'items': {'type': ['string', 'number']}}]}, 'any_of': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'op'], 'properties': {'op': {'enum': ['eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'in', 'contains', 'starts_with', 'is_blank', 'not_blank', 'not_contains', 'not_in', 'any_of'], 'type': 'string'}, 'field': {'type': 'string'}, 'value': {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}, {'type': 'array', 'items': {'type': ['string', 'number']}}]}}, 'additionalProperties': False}, 'maxItems': 12, 'description': 'With op any_of: the conditions, any one of which keeps the row (one level).'}}, 'additionalProperties': False}, 'maxItems': 12, 'description': 'Conditions on any column, all of which must hold. Blank cells never satisfy a comparison; the response counts rows excluded only because a tested column was blank. A small or empty answer says how many rows each condition removed and what the column really holds.'}, 'county': {'type': 'string', 'description': 'Shortcut for where county eq <value>'}, 'exclude': {'type': 'array', 'items': {'type': 'string'}, 'description': "With category or datasets: dataset slugs left out (a category minus one of its members, e.g. a list's competitors are its own category with itself excluded)"}, 'permits': {'type': 'object', 'properties': {'days': {'type': 'integer', 'maximum': 3650, 'minimum': 1, 'description': 'Issued in the last N days (default 365). /find: permits_days=90'}, 'type': {'enum': ['any', 'new_construction', 'commercial', 'residential', 'renovation', 'demolition', 'electrical', 'plumbing', 'mechanical', 'roofing', 'solar', 'sign', 'pool'], 'type': 'string', 'description': 'The kind of permit (default any). /find: permits_type=commercial'}, 'metres': {'type': 'integer', 'maximum': 200, 'minimum': 10, 'description': 'How close a permit must be to the row, in metres (default 60). /find: permits_m=60'}, 'min_usd': {'type': 'number', 'minimum': 0, 'description': 'Valuation at least this many dollars, e.g. 1000000. /find: permits_min_usd=1000000'}}, 'description': 'Only rows with a BUILDING PERMIT nearby, read live from the city\'s own permit register at question time — e.g. {"dataset": "<slug>", "city": "Austin", "state": "TX", "permits": {"days": 90, "type": "commercial", "min_usd": 1000000}} for places near a commercial permit issued in the last 90 days valued at $1M or more. days: issued in the last N days (default 365, and the answer says the window was defaulted); type: one of any, new_construction, commercial, residential, renovation, demolition, electrical, plumbing, mechanical, roofing, solar, sign, pool; min_usd: the valuation floor; metres: how close a permit must be (default 60). One city register per question, chosen from the base set\'s city, a ZIP in it, its county, or a state with one register; the cities read now: New York, NY; Los Angeles, CA; Chicago, IL; Dallas, TX; Austin, TX; San Francisco, CA; Seattle, WA; Nashville, TN. A kind or amount a city\'s register cannot tell is refused in words, never answered as any. The answer is free (counts, a preview, the price of the matching rows of our list) and its openData block names the register, its publisher, licence and when it was read. The same question on /find: …&permits=1&permits_days=90&permits_type=commercial&permits_min_usd=1000000. Not sold through a checkout yet: the answer\'s link is the page.', 'additionalProperties': False}, 'areas_in': {'type': 'object', 'required': ['by', 'ids'], 'properties': {'by': {'enum': ['county', 'zip', 'state', 'metro'], 'type': 'string'}, 'ids': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 200, 'minItems': 1, 'description': 'County FIPS, 5-digit ZIP, CBSA code or state code — the `id` of a count_by_area row'}}, 'description': 'Only rows in these areas, e.g. {"by": "county", "ids": ["18039"]} for Elkhart County, IN — the ids count_by_area returns. Rows are placed by county_fips, county + state, coordinates or ZIP, the same as count_by_area.', 'additionalProperties': False}, 'category': {'type': 'string', 'description': 'Instead of dataset: every dataset of one kind — "retail" (store chains), an industry or subcategory, or a kind of business such as "restaurant" or "bank branch" (search_datasets names these)'}, 'datasets': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 150, 'minItems': 1, 'description': 'Instead of dataset: several dataset slugs answered as one (one count, one preview, one price, one file)'}, 'area_where': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 6, 'description': 'Only rows whose county/zip/state/metro meets a Census condition, each as "<kind>:<attribute><op><value>" (ops > >= < <= =; values accept 1M, 250k, $50,000, 10%), e.g. "county:population>1000000". Every clause must hold; the fact is the area\'s, not the row\'s, and it adds nothing to the price. Attributes: population (population), households (households), median_household_income (median household income), median_age (median age), pct_65_plus (share of residents aged 65 or older), pct_bachelors_plus (share with a bachelor\'s degree or higher), housing_units (housing units), owner_occupied_share (owner-occupied share), median_home_value (median home value), establishments (business establishments), employees (employees), population_estimate (population estimate; county/metro/state only), population_growth_since_2020 (population growth since 2020; county/metro/state only); by NAICS sector, <sector>_establishments and <sector>_employees (employees: county/metro/state only) for agriculture, mining, utilities, construction, manufacturing, wholesale_trade, retail_trade, transportation, information, finance, real_estate, professional, management, administrative, educational_services, health_care, arts, accommodation, other_services; by detailed NAICS industry (1999 codes, 2 to 6 digits, the Census\'s titles), naics_<code>_establishments (county/metro/state/zip), naics_<code>_employees and naics_<code>_payroll (county/metro/state), e.g. naics_4471_establishments (gasoline stations naics 4471 establishments), naics_8111_establishments (automotive repair and maintenance establishments), naics_238990_establishments (all other specialty trade contractors naics 238990 establishments), naics_561621_establishments (security systems services except locksmiths establishments); 262 nclimdiv fields (NOAA nClimDiv county climate normals, 1991–2020, and 2025 actuals (release 2026-09-04)): january_high (January high), february_high (February high), march_high (March high), april_high (April high), may_high (May high), june_high (June high), …; 190 storms fields (NOAA Storm Events Database, 2016–2025, events a year by county): astronomical_low_tide_events (astronomical low tide events a year), avalanche_events (avalanche events a year), blizzard_events (blizzard events a year), coastal_flood_events (coastal flood events a year), cold_or_wind_chill_events (cold or wind chill events a year), debris_flow_events (debris flow events a year), …; 127 normals-annual fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): annual_cooling_degree_days_base_40 (annual cooling degree days base 40), annual_cooling_degree_days_base_45 (annual cooling degree days base 45), annual_cooling_degree_days_base_50 (annual cooling degree days base 50), annual_cooling_degree_days_base_55 (annual cooling degree days base 55), annual_cooling_degree_days_base_57 (annual cooling degree days base 57), annual_cooling_degree_days_base_60 (annual cooling degree days base 60), …; 67 normals-winter fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): winter_cooling_degree_days_base_40 (winter cooling degree days base 40), winter_cooling_degree_days_base_45 (winter cooling degree days base 45), winter_cooling_degree_days_base_50 (winter cooling degree days base 50), winter_cooling_degree_days_base_55 (winter cooling degree days base 55), winter_cooling_degree_days_base_57 (winter cooling degree days base 57), winter_cooling_degree_days_base_60 (winter cooling degree days base 60), …; 67 normals-spring fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): spring_cooling_degree_days_base_40 (spring cooling degree days base 40), spring_cooling_degree_days_base_45 (spring cooling degree days base 45), spring_cooling_degree_days_base_50 (spring cooling degree days base 50), spring_cooling_degree_days_base_55 (spring cooling degree days base 55), spring_cooling_degree_days_base_57 (spring cooling degree days base 57), spring_cooling_degree_days_base_60 (spring cooling degree days base 60), …; 67 normals-summer fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): summer_cooling_degree_days_base_40 (summer cooling degree days base 40), summer_cooling_degree_days_base_45 (summer cooling degree days base 45), summer_cooling_degree_days_base_50 (summer cooling degree days base 50), summer_cooling_degree_days_base_55 (summer cooling degree days base 55), summer_cooling_degree_days_base_57 (summer cooling degree days base 57), summer_cooling_degree_days_base_60 (summer cooling degree days base 60), …; 67 normals-fall fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): fall_cooling_degree_days_base_40 (fall cooling degree days base 40), fall_cooling_degree_days_base_45 (fall cooling degree days base 45), fall_cooling_degree_days_base_50 (fall cooling degree days base 50), fall_cooling_degree_days_base_55 (fall cooling degree days base 55), fall_cooling_degree_days_base_57 (fall cooling degree days base 57), fall_cooling_degree_days_base_60 (fall cooling degree days base 60), …; 15 hourly fields (NOAA U.S. Climate Normals 1991–2020, hourly station normals summarised over the year, by county): hourly_temperature (round the clock temperature), dew_point (dew point), sea_level_pressure (sea level pressure), cooling_degree_hours (cooling degree hours), heating_degree_hours (heating degree hours), clear_sky_share (share of clear hours), …; 51 b01001 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): pct_under_18 (share of residents aged 0 to 17), pct_5_to_14 (share of residents aged 5 to 14), b01001_001 (sex by age total), b01001_002 (sex by age male), b01001_003 (sex by age male 0 to 4 years), b01001_004 (sex by age male 5 to 9 years), …; 20 b11005 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): pct_households_with_people_under_18 (share of households with people aged 0 to 17), b11005_001 (households by presence of people 0 to 17 years by household type total), b11005_002 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years), b11005_003 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households), b11005_004 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households married-couple family), b11005_005 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households other family), …; 3 b25003 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b25003_001 (tenure total), b25003_002 (tenure owner occupied), b25003_003 (tenure renter occupied); 13 b08303 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b08303_001 (travel time to work total), b08303_002 (travel time to work 0 to 4 minutes), b08303_003 (travel time to work 5 to 9 minutes), b08303_004 (travel time to work 10 to 14 minutes), b08303_005 (travel time to work 15 to 19 minutes), b08303_006 (travel time to work 20 to 24 minutes), …; 7 b23025 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b23025_001 (employment status for the population 16 years or older total), b23025_002 (employment status for the population 16 years or older in labor force), b23025_003 (employment status for the population 16 years or older in labor force civilian labor force), b23025_004 (employment status for the population 16 years or older in labor force civilian labor force employed), b23025_005 (employment status for the population 16 years or older in labor force civilian labor force unemployed), b23025_006 (employment status for the population 16 years or older in labor force armed forces), …; 30 buildings fields (Overture Maps buildings, release 2026-08-19.0, summed per area): buildings (buildings), multi_story_buildings (multi-story buildings), mid_rise_buildings (mid-rise buildings), high_rise_buildings (high-rise buildings), buildings_2_floors_plus (buildings with 2 published floors and up), buildings_4_floors_plus (buildings with 4 published floors and up), …; 13 building-types fields (Overture Maps buildings, release 2026-08-19.0, summed per area): residential_buildings (residential buildings), outbuilding_buildings (outbuilding buildings), commercial_buildings (commercial buildings), industrial_buildings (industrial buildings), education_buildings (education buildings), agricultural_buildings (agricultural buildings), …; 43 building-classes fields (Overture Maps buildings, release 2026-08-19.0, summed per area): house_class_buildings (house class buildings), detached_class_buildings (detached class buildings), residential_class_buildings (residential class buildings), garage_class_buildings (garage class buildings), apartments_class_buildings (apartments class buildings), shed_class_buildings (shed class buildings), …; 42 building-classes-2 fields (Overture Maps buildings, release 2026-08-19.0, summed per area): religious_class_buildings (religious class buildings), civic_class_buildings (civic class buildings), fire_station_class_buildings (fire station class buildings), bungalow_class_buildings (bungalow class buildings), pavilion_class_buildings (pavilion class buildings), hut_class_buildings (hut class buildings), …; 27 building-roofs fields (Overture Maps buildings, release 2026-08-19.0, summed per area): gabled_roof_buildings (buildings with a gabled roof), flat_roof_buildings (buildings with a flat roof), hipped_roof_buildings (buildings with a hipped roof), mansard_roof_buildings (buildings with a mansard roof), round_roof_buildings (buildings with a round roof), pyramidal_roof_buildings (buildings with a pyramidal roof), …; 11 building-facades fields (Overture Maps buildings, release 2026-08-19.0, summed per area): brick_facade_buildings (buildings with a brick facade), wood_facade_buildings (buildings with a wood facade), metal_facade_buildings (buildings with a metal facade), concrete_facade_buildings (buildings with a concrete facade), plaster_facade_buildings (buildings with a plaster facade), plastic_facade_buildings (buildings with a plastic facade), ….'}, 'area_columns': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 6, 'description': 'Census and NOAA facts added to EVERY ROW as columns named <kind>_<attribute>, each as "<kind>:<attribute>,<attribute>", e.g. "county:population,median_household_income" — the county / ZIP / metro / state figures beside each location, in the preview and in the file you buy. Free. The same attribute words area_where takes (listed there).'}}, 'additionalProperties': False}
query_locations
Query locations (paid)
Return matching rows from one dataset, filtered on ANY of its columns — state/city/county/zip shortcuts plus `where` conditions with numeric comparisons (e.g. [{field:"revenue_amt",op:"gt",value:2000000}]), sorted with `order_by` and paged with `offset`. `near` ({place:"Topeka, KS"}, a zip, or lat+lng, optional radius_miles or drive_minutes) returns the closest rows first with distance_miles, on lists with coordinates — so "10 banks closest to Topeka" is one call for 10 rows. get_dataset lists the columns; count_locations (free) tells you how many rows match and what fetching them costs before you pay. Priced per row in USDC via x402 and settled only after the rows are produced, so a failed call costs nothing. The rate is derived from the dataset: roughly 2x its list price spread over its record count, so a small slice of a big file is cents. By default you get and pay for every matching row, up to 100 to 1,000 rows per call depending on how wide the dataset's rows are (count_locations reports maxRowsPerCall); pass limit for fewer. Call it without payment first: the result is an x402 PaymentRequired quote with the exact amount and `quote` (the same rows, each source at its rate, as count_locations' slice), and nothing is charged until you retry with payment. A paid call is billed for the rows it returns: each row at its own list's per-row rate (an Overture open-data row at $0.005; a row of a chain LocationLists sells its own list for, at that list's rate), plus a $0.01 per-call fee, rounded once to the nearest cent, at least $0.02, never more than the whole list. count_locations with the same filters, limit and offset quotes exactly that page, row source by row source (price.breakdown), before anything is paid. How a list is sold: our own lists are sold as a whole file (create_checkout / buy_dataset), and those of 5,000 records or more are also sold by the row (query_locations / create_query_checkout); smaller lists are sold whole only. Overture Maps lists (slugs starting overture-) are sold by the row ONLY, at any size — there is no file to buy. To cover several chains near one place, pass datasets or category and a total (up to 1,000 rows) instead of dataset: one answer, one price and one file, with source_dataset naming each row's dataset and duplicates removed; inside a combined answer, small datasets are sold by the row too.
Read only
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'zip': {'type': 'string', 'description': 'Shortcut for where zip eq <value>'}, 'city': {'type': 'string', 'description': 'Shortcut for where city eq <value>'}, 'near': {'type': 'object', 'properties': {'lat': {'type': 'number'}, 'lng': {'type': 'number'}, 'zip': {'type': 'string', 'description': '5-digit zip'}, 'place': {'type': 'string', 'description': 'City or town with state, e.g. "Topeka, KS". A neighborhood or misspelling falls back to the nearest Census place name in that state, and the answer says which.'}, 'points': {'type': 'array', 'items': {'type': 'object', 'properties': {'lat': {'$ref': '#/properties/near/properties/lat'}, 'lng': {'$ref': '#/properties/near/properties/lng'}, 'zip': {'$ref': '#/properties/near/properties/zip'}, 'place': {'type': 'string', 'description': 'City or town with state, e.g. "Topeka, KS"'}}, 'additionalProperties': False}, 'maxItems': 10, 'minItems': 1, 'description': "Several points instead of one place/zip/lat+lng (at most 10): a row counts when it is within the radius or drive-time band of ANY of them, e.g. an operator's offices."}, 'radius_miles': {'type': 'number', 'maximum': 500, 'description': 'Only rows within this straight-line distance of the point (or of any of the points). Free.', 'exclusiveMinimum': 0}, 'drive_minutes': {'type': 'integer', 'maximum': 240, 'minimum': 5, 'description': 'Instead of radius_miles: only rows a car can reach from the point (or from any of the points) in this many minutes, typical road speeds, no live traffic. On this server: 5-60 minutes; the routing provider draws no longer band, so a 2- or 4-hour reach is not available here — use the largest band, 60 minutes, or radius_miles. One routing call per point per request; on /find it needs an issued key (radius is free). Drive time depends on an outside routing service: when an answer says drive-time search is unavailable or not switched on, ask the same question again with radius_miles (straight-line miles, always available, free).'}}, 'description': "Distance search, on lists with map coordinates (distanceSearch in search results): give ONE of place, zip, lat+lng, or `points` (several of those: within reach of ANY of them, distance to the nearest). Rows come back nearest first with a distance_miles column (straight line); combine with limit for 'the 10 closest', radius_miles for 'everything within 25 miles', or drive_minutes for 'everything within a 30-minute drive' (adds within_drive_minutes; 5-60 minutes; the routing provider draws no longer band, so a 2- or 4-hour reach is not available here — use the largest band, 60 minutes, or radius_miles). Give radius_miles or drive_minutes, not both. Rows without coordinates are excluded and counted. Drive time depends on an outside routing service: when an answer says drive-time search is unavailable or not switched on, ask the same question again with radius_miles (straight-line miles, always available, free).", 'additionalProperties': False}, 'limit': {'type': 'integer', 'maximum': 1000, 'minimum': 1, 'description': "Rows to return and pay for. Default: every matching row, up to the most one call can return. That maximum depends on how wide the dataset's rows are, from 100 to 1,000; count_locations reports it as maxRowsPerCall, and a larger limit is reduced to it before pricing."}, 'metro': {'type': 'string', 'description': 'Only rows in one metro area (CBSA): its 5-digit code ("37980") or its name ("Philadelphia", "Philadelphia, PA"). The same as areas_in {"by": "metro", "ids": [code]}: rows are placed the way count_by_area places them, so "all hospitals in the Philadelphia metro" is one count, one price and one purchase.'}, 'shape': {'enum': ['hubspot', 'salesforce'], 'type': 'string', 'description': 'CRM-ready columns: hubspot (Company name, Company domain name, Website URL, Phone number, Street address, Street address 2, City, State/Region, Postal code, Country/Region, Industry, Description) or salesforce (Name, Website, Phone, BillingStreet, BillingCity, BillingState, BillingPostalCode, BillingCountry, Industry, Description) first, then every other column of the list under its own name. Nothing is dropped; a CRM column the list lacks is present and blank.'}, 'state': {'type': 'string', 'description': 'Shortcut for where state eq <value>. Two-letter code.'}, 'total': {'type': 'integer', 'maximum': 1000, 'minimum': 1, 'description': 'With datasets or category: rows to return and pay for across all of them (default every distinct match, up to 1,000), in one payment'}, 'where': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'op'], 'properties': {'op': {'enum': ['eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'in', 'contains', 'starts_with', 'is_blank', 'not_blank', 'not_contains', 'not_in', 'any_of'], 'type': 'string', 'description': "eq/ne: case-insensitive match (numeric when both sides are numbers; yes/no, true/false, y/n and 1/0 count as the same answer). gt/gte/lt/lte: numeric when value is a number, else text order (works for ISO dates). in / not_in: value is an array. contains / not_contains / starts_with: case-insensitive text. is_blank/not_blank: no value (a source's no-value marker such as <UNAVAIL> or N/A counts as blank). any_of: no value; the row is kept when ANY condition in any_of holds (e.g. brand not_in [chains] OR brand is_blank, to keep independents)."}, 'field': {'type': 'string', 'description': 'Column name as listed by get_dataset (columns[].name), e.g. revenue_amt'}, 'value': {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}, {'type': 'array', 'items': {'type': ['string', 'number']}}]}, 'any_of': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'op'], 'properties': {'op': {'enum': ['eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'in', 'contains', 'starts_with', 'is_blank', 'not_blank', 'not_contains', 'not_in', 'any_of'], 'type': 'string'}, 'field': {'type': 'string'}, 'value': {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}, {'type': 'array', 'items': {'type': ['string', 'number']}}]}}, 'additionalProperties': False}, 'maxItems': 12, 'description': 'With op any_of: the conditions, any one of which keeps the row (one level).'}}, 'additionalProperties': False}, 'maxItems': 12, 'description': 'Conditions on any column, all of which must hold. Blank cells never satisfy a comparison; the response counts rows excluded only because a tested column was blank. A small or empty answer says how many rows each condition removed and what the column really holds.'}, 'county': {'type': 'string', 'description': 'Shortcut for where county eq <value>'}, 'offset': {'type': 'integer', 'maximum': 10000, 'minimum': 0, 'description': 'Skip this many matching rows, to page past the first call'}, 'relate': {'type': 'object', 'additionalProperties': {}}, 'dataset': {'type': 'string', 'description': 'Dataset slug, e.g. nonprofits-va. To combine several, give datasets or category instead.'}, 'exclude': {'type': 'array', 'items': {'type': 'string'}, 'description': "With category or datasets: dataset slugs left out (a category minus one of its members, e.g. a list's competitors are its own category with itself excluded)"}, 'permits': {'type': 'object', 'properties': {'days': {'type': 'integer', 'maximum': 3650, 'minimum': 1, 'description': 'Issued in the last N days (default 365). /find: permits_days=90'}, 'type': {'enum': ['any', 'new_construction', 'commercial', 'residential', 'renovation', 'demolition', 'electrical', 'plumbing', 'mechanical', 'roofing', 'solar', 'sign', 'pool'], 'type': 'string', 'description': 'The kind of permit (default any). /find: permits_type=commercial'}, 'metres': {'type': 'integer', 'maximum': 200, 'minimum': 10, 'description': 'How close a permit must be to the row, in metres (default 60). /find: permits_m=60'}, 'min_usd': {'type': 'number', 'minimum': 0, 'description': 'Valuation at least this many dollars, e.g. 1000000. /find: permits_min_usd=1000000'}}, 'description': 'Only rows with a BUILDING PERMIT nearby, read live from the city\'s own permit register at question time — e.g. {"dataset": "<slug>", "city": "Austin", "state": "TX", "permits": {"days": 90, "type": "commercial", "min_usd": 1000000}} for places near a commercial permit issued in the last 90 days valued at $1M or more. days: issued in the last N days (default 365, and the answer says the window was defaulted); type: one of any, new_construction, commercial, residential, renovation, demolition, electrical, plumbing, mechanical, roofing, solar, sign, pool; min_usd: the valuation floor; metres: how close a permit must be (default 60). One city register per question, chosen from the base set\'s city, a ZIP in it, its county, or a state with one register; the cities read now: New York, NY; Los Angeles, CA; Chicago, IL; Dallas, TX; Austin, TX; San Francisco, CA; Seattle, WA; Nashville, TN. A kind or amount a city\'s register cannot tell is refused in words, never answered as any. The answer is free (counts, a preview, the price of the matching rows of our list) and its openData block names the register, its publisher, licence and when it was read. The same question on /find: …&permits=1&permits_days=90&permits_type=commercial&permits_min_usd=1000000. Not sold through a checkout yet: the answer\'s link is the page.', 'additionalProperties': False}, 'areas_in': {'type': 'object', 'required': ['by', 'ids'], 'properties': {'by': {'enum': ['county', 'zip', 'state', 'metro'], 'type': 'string'}, 'ids': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 200, 'minItems': 1, 'description': 'County FIPS, 5-digit ZIP, CBSA code or state code — the `id` of a count_by_area row'}}, 'description': 'Only rows in these areas, e.g. {"by": "county", "ids": ["18039"]} for Elkhart County, IN — the ids count_by_area returns. Rows are placed by county_fips, county + state, coordinates or ZIP, the same as count_by_area.', 'additionalProperties': False}, 'category': {'type': 'string', 'description': 'Instead of dataset: every dataset of one kind — "retail" (store chains), an industry or subcategory, or a kind of business such as "restaurant" or "bank branch" (search_datasets names these)'}, 'datasets': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 150, 'minItems': 1, 'description': 'Instead of dataset: several dataset slugs answered as one (one count, one preview, one price, one file)'}, 'order_by': {'type': 'object', 'required': ['field'], 'properties': {'field': {'type': 'string'}, 'direction': {'enum': ['asc', 'desc'], 'type': 'string', 'description': 'Default desc'}}, 'description': "Return the top rows by one column, e.g. {field: 'revenue_amt'} for the largest first. Blanks sort last.", 'additionalProperties': False}, 'area_where': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 6, 'description': 'Only rows whose county/zip/state/metro meets a Census condition, each as "<kind>:<attribute><op><value>" (ops > >= < <= =; values accept 1M, 250k, $50,000, 10%), e.g. "county:population>1000000". Every clause must hold; the fact is the area\'s, not the row\'s, and it adds nothing to the price. Attributes: population (population), households (households), median_household_income (median household income), median_age (median age), pct_65_plus (share of residents aged 65 or older), pct_bachelors_plus (share with a bachelor\'s degree or higher), housing_units (housing units), owner_occupied_share (owner-occupied share), median_home_value (median home value), establishments (business establishments), employees (employees), population_estimate (population estimate; county/metro/state only), population_growth_since_2020 (population growth since 2020; county/metro/state only); by NAICS sector, <sector>_establishments and <sector>_employees (employees: county/metro/state only) for agriculture, mining, utilities, construction, manufacturing, wholesale_trade, retail_trade, transportation, information, finance, real_estate, professional, management, administrative, educational_services, health_care, arts, accommodation, other_services; by detailed NAICS industry (1999 codes, 2 to 6 digits, the Census\'s titles), naics_<code>_establishments (county/metro/state/zip), naics_<code>_employees and naics_<code>_payroll (county/metro/state), e.g. naics_4471_establishments (gasoline stations naics 4471 establishments), naics_8111_establishments (automotive repair and maintenance establishments), naics_238990_establishments (all other specialty trade contractors naics 238990 establishments), naics_561621_establishments (security systems services except locksmiths establishments); 262 nclimdiv fields (NOAA nClimDiv county climate normals, 1991–2020, and 2025 actuals (release 2026-09-04)): january_high (January high), february_high (February high), march_high (March high), april_high (April high), may_high (May high), june_high (June high), …; 190 storms fields (NOAA Storm Events Database, 2016–2025, events a year by county): astronomical_low_tide_events (astronomical low tide events a year), avalanche_events (avalanche events a year), blizzard_events (blizzard events a year), coastal_flood_events (coastal flood events a year), cold_or_wind_chill_events (cold or wind chill events a year), debris_flow_events (debris flow events a year), …; 127 normals-annual fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): annual_cooling_degree_days_base_40 (annual cooling degree days base 40), annual_cooling_degree_days_base_45 (annual cooling degree days base 45), annual_cooling_degree_days_base_50 (annual cooling degree days base 50), annual_cooling_degree_days_base_55 (annual cooling degree days base 55), annual_cooling_degree_days_base_57 (annual cooling degree days base 57), annual_cooling_degree_days_base_60 (annual cooling degree days base 60), …; 67 normals-winter fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): winter_cooling_degree_days_base_40 (winter cooling degree days base 40), winter_cooling_degree_days_base_45 (winter cooling degree days base 45), winter_cooling_degree_days_base_50 (winter cooling degree days base 50), winter_cooling_degree_days_base_55 (winter cooling degree days base 55), winter_cooling_degree_days_base_57 (winter cooling degree days base 57), winter_cooling_degree_days_base_60 (winter cooling degree days base 60), …; 67 normals-spring fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): spring_cooling_degree_days_base_40 (spring cooling degree days base 40), spring_cooling_degree_days_base_45 (spring cooling degree days base 45), spring_cooling_degree_days_base_50 (spring cooling degree days base 50), spring_cooling_degree_days_base_55 (spring cooling degree days base 55), spring_cooling_degree_days_base_57 (spring cooling degree days base 57), spring_cooling_degree_days_base_60 (spring cooling degree days base 60), …; 67 normals-summer fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): summer_cooling_degree_days_base_40 (summer cooling degree days base 40), summer_cooling_degree_days_base_45 (summer cooling degree days base 45), summer_cooling_degree_days_base_50 (summer cooling degree days base 50), summer_cooling_degree_days_base_55 (summer cooling degree days base 55), summer_cooling_degree_days_base_57 (summer cooling degree days base 57), summer_cooling_degree_days_base_60 (summer cooling degree days base 60), …; 67 normals-fall fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): fall_cooling_degree_days_base_40 (fall cooling degree days base 40), fall_cooling_degree_days_base_45 (fall cooling degree days base 45), fall_cooling_degree_days_base_50 (fall cooling degree days base 50), fall_cooling_degree_days_base_55 (fall cooling degree days base 55), fall_cooling_degree_days_base_57 (fall cooling degree days base 57), fall_cooling_degree_days_base_60 (fall cooling degree days base 60), …; 15 hourly fields (NOAA U.S. Climate Normals 1991–2020, hourly station normals summarised over the year, by county): hourly_temperature (round the clock temperature), dew_point (dew point), sea_level_pressure (sea level pressure), cooling_degree_hours (cooling degree hours), heating_degree_hours (heating degree hours), clear_sky_share (share of clear hours), …; 51 b01001 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): pct_under_18 (share of residents aged 0 to 17), pct_5_to_14 (share of residents aged 5 to 14), b01001_001 (sex by age total), b01001_002 (sex by age male), b01001_003 (sex by age male 0 to 4 years), b01001_004 (sex by age male 5 to 9 years), …; 20 b11005 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): pct_households_with_people_under_18 (share of households with people aged 0 to 17), b11005_001 (households by presence of people 0 to 17 years by household type total), b11005_002 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years), b11005_003 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households), b11005_004 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households married-couple family), b11005_005 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households other family), …; 3 b25003 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b25003_001 (tenure total), b25003_002 (tenure owner occupied), b25003_003 (tenure renter occupied); 13 b08303 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b08303_001 (travel time to work total), b08303_002 (travel time to work 0 to 4 minutes), b08303_003 (travel time to work 5 to 9 minutes), b08303_004 (travel time to work 10 to 14 minutes), b08303_005 (travel time to work 15 to 19 minutes), b08303_006 (travel time to work 20 to 24 minutes), …; 7 b23025 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b23025_001 (employment status for the population 16 years or older total), b23025_002 (employment status for the population 16 years or older in labor force), b23025_003 (employment status for the population 16 years or older in labor force civilian labor force), b23025_004 (employment status for the population 16 years or older in labor force civilian labor force employed), b23025_005 (employment status for the population 16 years or older in labor force civilian labor force unemployed), b23025_006 (employment status for the population 16 years or older in labor force armed forces), …; 30 buildings fields (Overture Maps buildings, release 2026-08-19.0, summed per area): buildings (buildings), multi_story_buildings (multi-story buildings), mid_rise_buildings (mid-rise buildings), high_rise_buildings (high-rise buildings), buildings_2_floors_plus (buildings with 2 published floors and up), buildings_4_floors_plus (buildings with 4 published floors and up), …; 13 building-types fields (Overture Maps buildings, release 2026-08-19.0, summed per area): residential_buildings (residential buildings), outbuilding_buildings (outbuilding buildings), commercial_buildings (commercial buildings), industrial_buildings (industrial buildings), education_buildings (education buildings), agricultural_buildings (agricultural buildings), …; 43 building-classes fields (Overture Maps buildings, release 2026-08-19.0, summed per area): house_class_buildings (house class buildings), detached_class_buildings (detached class buildings), residential_class_buildings (residential class buildings), garage_class_buildings (garage class buildings), apartments_class_buildings (apartments class buildings), shed_class_buildings (shed class buildings), …; 42 building-classes-2 fields (Overture Maps buildings, release 2026-08-19.0, summed per area): religious_class_buildings (religious class buildings), civic_class_buildings (civic class buildings), fire_station_class_buildings (fire station class buildings), bungalow_class_buildings (bungalow class buildings), pavilion_class_buildings (pavilion class buildings), hut_class_buildings (hut class buildings), …; 27 building-roofs fields (Overture Maps buildings, release 2026-08-19.0, summed per area): gabled_roof_buildings (buildings with a gabled roof), flat_roof_buildings (buildings with a flat roof), hipped_roof_buildings (buildings with a hipped roof), mansard_roof_buildings (buildings with a mansard roof), round_roof_buildings (buildings with a round roof), pyramidal_roof_buildings (buildings with a pyramidal roof), …; 11 building-facades fields (Overture Maps buildings, release 2026-08-19.0, summed per area): brick_facade_buildings (buildings with a brick facade), wood_facade_buildings (buildings with a wood facade), metal_facade_buildings (buildings with a metal facade), concrete_facade_buildings (buildings with a concrete facade), plaster_facade_buildings (buildings with a plaster facade), plastic_facade_buildings (buildings with a plastic facade), ….'}, 'area_columns': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 6, 'description': 'Census and NOAA facts added to EVERY ROW as columns named <kind>_<attribute>, each as "<kind>:<attribute>,<attribute>", e.g. "county:population,median_household_income" — the county / ZIP / metro / state figures beside each location, in the preview and in the file you buy. Free. The same attribute words area_where takes (listed there).'}}, 'additionalProperties': False}
relate_locations
Relate two sets of locations (free)
Free. How one set of places relates to another, by straight-line distance. The base set is the usual dataset / datasets / category plus filters; relate.anchor is the other set, given the same way. Modes: nearest (each base row's k<=3 nearest anchors with miles), count_within (rank base rows by how many anchors are within radius_miles), within_any (base rows with at least one anchor within radius_miles), none_within (base rows with no anchor within radius_miles). Mode next_best (no anchor, needs the base set's state) ranks the candidate NEW sites in that state by how well they match what the base list's own locations typically have nearby, blended with an estimated market capture; every candidate names its matched factors. Mode typically_near answers "who is X typically located near?" — the PROFILE: the kinds of place and brands the base list's locations have nearby far more often than a typical spot (share of locations, lift, average miles), with an `answer` sentence and a link to the ranked sites; state optional (without one it is computed in the list's top state and the answer says which); a thin sample is said, never sold. Every set (base, anchor) also takes metro (a CBSA code or name) or areas_in (county / ZIP / metro / state ids), like count_locations. Mode near / not_near matches by distance only (near_m metres, default 30) and is how a LIVE public register is compared: give a set as opendata {source, state} instead of a dataset — search_datasets with kind "register" finds the source key. A register is read at the moment you ask, never sold; the answer names its publisher, licence and read time. Returns counts for both sets (rows without coordinates are left out and counted), summary stats, up to 3 preview rows, the price of the full answer (base rows plus the anchor rows named, each at its dataset's per-row rate, one card fee) and how to buy it with query_locations or create_query_checkout using the same arguments. Example: {"dataset": "<slug>", "state": "VA", "relate": {"mode": "nearest", "k": 1, "anchor": {"dataset": "<other slug>", "metro": "Richmond"}}}. Profile: {"dataset": "<slug>", "relate": {"mode": "typically_near"}}. Live register: {"dataset": "ymca", "state": "NY", "relate": {"mode": "near", "near_m": 30, "anchor": {"opendata": {"source": "data.ny.gov/cb42-qumz", "state": "NY"}}}}.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['relate'], 'properties': {'zip': {'type': 'string'}, 'city': {'type': 'string'}, 'near': {'type': 'object', 'properties': {'lat': {'type': 'number'}, 'lng': {'type': 'number'}, 'zip': {'type': 'string', 'description': '5-digit zip'}, 'place': {'type': 'string', 'description': 'City or town with state, e.g. "Topeka, KS"'}, 'points': {'type': 'array', 'items': {'type': 'object', 'properties': {'lat': {'$ref': '#/properties/near/properties/lat'}, 'lng': {'$ref': '#/properties/near/properties/lng'}, 'zip': {'$ref': '#/properties/near/properties/zip'}, 'place': {'$ref': '#/properties/near/properties/place'}}, 'additionalProperties': False}, 'maxItems': 10, 'minItems': 1, 'description': "Several points instead of one place/zip/lat+lng (at most 10): a row counts when it is within the radius or drive-time band of ANY of them, e.g. an operator's offices."}, 'radius_miles': {'type': 'number', 'maximum': 500, 'description': 'Only rows within this straight-line distance of the point (or of any of the points). Free.', 'exclusiveMinimum': 0}, 'drive_minutes': {'type': 'integer', 'maximum': 240, 'minimum': 5, 'description': 'Instead of radius_miles: only rows a car can reach from the point (or from any of the points) in this many minutes, typical road speeds, no live traffic. On this server: 5-60 minutes; the routing provider draws no longer band, so a 2- or 4-hour reach is not available here — use the largest band, 60 minutes, or radius_miles. One routing call per point per request; on /find it needs an issued key (radius is free). Drive time depends on an outside routing service: when an answer says drive-time search is unavailable or not switched on, ask the same question again with radius_miles (straight-line miles, always available, free).'}}, 'description': 'Distance search on lists with coordinates: ONE of place, zip, lat+lng or points, with radius_miles or drive_minutes (not both).', 'additionalProperties': False}, 'metro': {'type': 'string', 'description': 'Only rows in one metro area (CBSA): its 5-digit code ("37980") or its name ("Philadelphia", "Philadelphia, PA"). The same as areas_in {"by": "metro", "ids": [code]}.'}, 'state': {'type': 'string'}, 'total': {'type': 'integer', 'maximum': 10000, 'minimum': 1, 'description': 'Base rows wanted, first in answer order'}, 'where': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'op'], 'properties': {'op': {'enum': ['eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'in', 'contains', 'starts_with', 'is_blank', 'not_blank', 'not_contains', 'not_in', 'any_of'], 'type': 'string'}, 'field': {'type': 'string'}, 'value': {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}, {'type': 'array', 'items': {'type': ['string', 'number']}}]}, 'any_of': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'op'], 'properties': {'op': {'enum': ['eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'in', 'contains', 'starts_with', 'is_blank', 'not_blank', 'not_contains', 'not_in', 'any_of'], 'type': 'string'}, 'field': {'type': 'string'}, 'value': {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}, {'type': 'array', 'items': {'type': ['string', 'number']}}]}}, 'additionalProperties': False}, 'maxItems': 12}}, 'additionalProperties': False}, 'maxItems': 12}, 'county': {'type': 'string'}, 'relate': {'type': 'object', 'required': ['mode'], 'properties': {'k': {'type': 'integer', 'maximum': 3, 'minimum': 1, 'description': 'nearest: how many anchors per base row. next_best / typically_near: H3 rings counted as nearby, 1-3 (default 2, about a mile)'}, 'also': {'type': 'array', 'items': {'type': 'string'}, 'description': 'same_place / near only: the sets a base row must be the same place as (near: within near_m of) some row of, by label ("b", "c"); default every set'}, 'mode': {'enum': ['nearest', 'count_within', 'within_any', 'none_within', 'same_place', 'not_same_place', 'near', 'not_near', 'next_best', 'typically_near', 'overlap'], 'type': 'string', 'description': 'nearest | count_within | within_any | none_within | same_place | not_same_place | near | not_near | next_best | typically_near | overlap'}, 'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'next_best only: candidates ranked (default 50)'}, 'order': {'enum': ['asc', 'desc'], 'type': 'string'}, 'anchor': {'type': 'object', 'properties': {'zip': {'$ref': '#/properties/zip'}, 'city': {'$ref': '#/properties/city'}, 'near': {'$ref': '#/properties/near'}, 'metro': {'$ref': '#/properties/metro'}, 'state': {'$ref': '#/properties/state'}, 'where': {'$ref': '#/properties/where'}, 'county': {'$ref': '#/properties/county'}, 'dataset': {'$ref': '#/properties/dataset'}, 'exclude': {'$ref': '#/properties/exclude'}, 'areas_in': {'$ref': '#/properties/areas_in'}, 'category': {'$ref': '#/properties/category'}, 'datasets': {'$ref': '#/properties/datasets'}, 'opendata': {'$ref': '#/properties/opendata', 'description': 'INSTEAD of dataset / datasets / category: a public register read LIVE from the body that publishes it, at the moment of the question — e.g. a state\'s licensed child-care programs. Matched by distance only (relate.mode near / not_near, near_m metres, default 30), because the publisher\'s own coordinates are the evidence. It is not a list we sell: the answer gives counts and a preview, names the publisher, the licence and when it was read, and prices only the rows of OUR lists. E.g. {"dataset": "ymca", "state": "NY", "relate": {"mode": "near", "near_m": 30, "anchor": {"opendata": {"source": "data.ny.gov/cb42-qumz", "state": "NY"}}}}.'}, 'area_where': {'$ref': '#/properties/area_where'}, 'area_columns': {'$ref': '#/properties/area_columns'}}, 'description': 'The other set: dataset, datasets or category, plus filters. Every mode but next_best and typically_near needs it', 'additionalProperties': False}, 'lambda': {'type': 'number', 'maximum': 10, 'description': 'next_best only: the Huff distance-decay exponent (default 2, the traditional value)', 'exclusiveMinimum': 0}, 'near_m': {'type': 'integer', 'maximum': 200, 'minimum': 10, 'description': 'near / not_near only: how close, in metres, a place of the other set must be (default 30, 10-200). Distance only — no name or address is compared. /find: near_m=30.'}, 'anchors': {'type': 'array', 'items': {'type': 'object', 'properties': {'zip': {'$ref': '#/properties/zip'}, 'city': {'$ref': '#/properties/city'}, 'near': {'$ref': '#/properties/near'}, 'metro': {'$ref': '#/properties/metro'}, 'state': {'$ref': '#/properties/state'}, 'where': {'$ref': '#/properties/where'}, 'county': {'$ref': '#/properties/county'}, 'dataset': {'$ref': '#/properties/dataset'}, 'exclude': {'$ref': '#/properties/exclude'}, 'areas_in': {'$ref': '#/properties/areas_in'}, 'category': {'$ref': '#/properties/category'}, 'datasets': {'$ref': '#/properties/datasets'}, 'opendata': {'$ref': '#/properties/opendata', 'description': 'INSTEAD of dataset / datasets / category: a public register read LIVE from the body that publishes it, at the moment of the question — e.g. a state\'s licensed child-care programs. Matched by distance only (relate.mode near / not_near, near_m metres, default 30), because the publisher\'s own coordinates are the evidence. It is not a list we sell: the answer gives counts and a preview, names the publisher, the licence and when it was read, and prices only the rows of OUR lists. E.g. {"dataset": "ymca", "state": "NY", "relate": {"mode": "near", "near_m": 30, "anchor": {"opendata": {"source": "data.ny.gov/cb42-qumz", "state": "NY"}}}}.'}, 'area_where': {'$ref': '#/properties/area_where'}, 'area_columns': {'$ref': '#/properties/area_columns'}}, 'additionalProperties': False}, 'maxItems': 2, 'description': 'same_place (and near) only: further sets (c, d) after anchor (b), each given the same way'}, 'not_also': {'type': 'array', 'items': {'type': 'string'}, 'description': 'same_place / near only: the sets a base row must NOT match any row of; not_same_place (not_near) with one set is ["b"]'}, 'anchor_all': {'type': 'array', 'items': {'type': 'array', 'items': {'type': 'string'}}, 'maxItems': 3, 'minItems': 2, 'description': 'count_within / within_any: ONE OF EACH instead of one of any. The anchor set\'s dataset slugs grouped as the question named them — [["a"],["b"]] keeps only base rows with a row of BOTH within the distance. Omit for the ordinary any-of reading.'}, 'radius_miles': {'type': 'number', 'maximum': 250, 'exclusiveMinimum': 0}, 'reveal_anchor': {'type': 'boolean'}, 'within_drive_minutes': {'type': 'integer', 'maximum': 60, 'minimum': 5, 'description': 'Drive time instead of radius_miles (5-60 minutes). count_within / within_any / none_within only; at most 60 base rows. Drive time depends on an outside routing service: when an answer says drive-time search is unavailable or not switched on, ask the same question again with radius_miles (straight-line miles, always available, free).'}}, 'description': "Relate each base row to an anchor set. nearest: the k nearest anchors with miles. count_within: rank by anchors within radius_miles. within_any: rows with an anchor within radius_miles. none_within: rows with none. same_place / not_same_place: base rows that are (or are not) the same physical place as a row of each set — same address, or within 60 m sharing a name word — with every region of the overlap counted; N-way with anchors, also and not_also. near / not_near: the same N-way shape matched by DISTANCE ONLY, within near_m metres (default 30) — the rule for a live open-data register given as a set's opendata. next_best: no anchor; needs the base set's state — the candidate sites in that state ranked by how well they match what the base list's own locations typically have nearby, blended with an estimated market capture. typically_near: the PROFILE of the same analysis, no anchor, state optional — what the base list's locations typically have nearby (the signature: each kind of place or brand near at least 15% of them and at least 1.5x as often as near a typical commercial spot), with a link to the ranked sites; without a state it is computed in the list's top state and the answer says which. Under 10 locations the pattern is shown with a thin-sample note and nothing is sold. Straight-line miles, or real drive time with within_drive_minutes (5-60) on count_within / within_any / none_within, capped at 60 base rows. overlap: a TERRITORY question, not a row count — buffer every base row and every anchor row by radius_miles (straight-line, default 3, 1-25), union each into one shape, and answer what share of the base's shape the anchor's shape covers, plus each base row's own share (lowest first finds the whitespace rows with no nearby anchor territory). Free: the shares, the two territories in square miles and the headline percentage. Paid: the base rows with their own share, at that list's per-row rate.", 'additionalProperties': False}, 'dataset': {'type': 'string'}, 'exclude': {'type': 'array', 'items': {'type': 'string'}, 'description': "Dataset slugs left out wherever the set expands: a category minus one of its members (a list's competitors are its own category with itself excluded)."}, 'areas_in': {'type': 'object', 'required': ['by', 'ids'], 'properties': {'by': {'enum': ['county', 'zip', 'state', 'metro'], 'type': 'string'}, 'ids': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 200, 'minItems': 1, 'description': 'County FIPS, 5-digit ZIP, CBSA code or state code — the `id` of a count_by_area row'}}, 'description': 'Only rows in these areas, e.g. {"by": "county", "ids": ["51760"]} for Richmond city, VA — the ids count_by_area returns, placed the same way (/find: areas_in=county:51760).', 'additionalProperties': False}, 'category': {'type': 'string'}, 'datasets': {'type': 'array', 'items': {'type': 'string'}, 'minItems': 1}, 'opendata': {'type': 'object', 'required': ['source'], 'properties': {'zips': {'type': 'array', 'items': {'type': 'string'}, 'minItems': 1, 'description': 'Or cut it to 5-digit ZIP codes, e.g. ["78114", "78154"] (/find: opendata_zips=78114,78154)'}, 'state': {'type': 'string', 'description': 'Cut the register to one state, e.g. "NY" (/find: opendata_state=NY)'}, 'where': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 12, 'description': 'Conditions on the register\'s own columns, each "column:op:value" with op eq | starts_with | contains | not_blank, e.g. ["license_status:starts_with:Active"] (/find: opendata_where=)'}, 'source': {'type': 'string', 'description': 'The register\'s key, "<domain>/<id>" — search_datasets with kind "register" finds it, e.g. "data.ny.gov/cb42-qumz" (New York\'s licensed child-care programs)'}}, 'description': 'INSTEAD of dataset / datasets / category: a public register read LIVE from the body that publishes it, at the moment of the question — e.g. a state\'s licensed child-care programs. Matched by distance only (relate.mode near / not_near, near_m metres, default 30), because the publisher\'s own coordinates are the evidence. It is not a list we sell: the answer gives counts and a preview, names the publisher, the licence and when it was read, and prices only the rows of OUR lists. E.g. {"dataset": "ymca", "state": "NY", "relate": {"mode": "near", "near_m": 30, "anchor": {"opendata": {"source": "data.ny.gov/cb42-qumz", "state": "NY"}}}}.', 'additionalProperties': False}, 'area_where': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 6, 'description': 'Only rows whose county/zip/state/metro meets a Census condition, each as "<kind>:<attribute><op><value>" (ops > >= < <= =; values accept 1M, 250k, $50,000, 10%), e.g. "county:population>1000000". Every clause must hold; the fact is the area\'s, not the row\'s, and it adds nothing to the price. Attributes: population (population), households (households), median_household_income (median household income), median_age (median age), pct_65_plus (share of residents aged 65 or older), pct_bachelors_plus (share with a bachelor\'s degree or higher), housing_units (housing units), owner_occupied_share (owner-occupied share), median_home_value (median home value), establishments (business establishments), employees (employees), population_estimate (population estimate; county/metro/state only), population_growth_since_2020 (population growth since 2020; county/metro/state only); by NAICS sector, <sector>_establishments and <sector>_employees (employees: county/metro/state only) for agriculture, mining, utilities, construction, manufacturing, wholesale_trade, retail_trade, transportation, information, finance, real_estate, professional, management, administrative, educational_services, health_care, arts, accommodation, other_services; by detailed NAICS industry (1999 codes, 2 to 6 digits, the Census\'s titles), naics_<code>_establishments (county/metro/state/zip), naics_<code>_employees and naics_<code>_payroll (county/metro/state), e.g. naics_4471_establishments (gasoline stations naics 4471 establishments), naics_8111_establishments (automotive repair and maintenance establishments), naics_238990_establishments (all other specialty trade contractors naics 238990 establishments), naics_561621_establishments (security systems services except locksmiths establishments); 262 nclimdiv fields (NOAA nClimDiv county climate normals, 1991–2020, and 2025 actuals (release 2026-09-04)): january_high (January high), february_high (February high), march_high (March high), april_high (April high), may_high (May high), june_high (June high), …; 190 storms fields (NOAA Storm Events Database, 2016–2025, events a year by county): astronomical_low_tide_events (astronomical low tide events a year), avalanche_events (avalanche events a year), blizzard_events (blizzard events a year), coastal_flood_events (coastal flood events a year), cold_or_wind_chill_events (cold or wind chill events a year), debris_flow_events (debris flow events a year), …; 127 normals-annual fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): annual_cooling_degree_days_base_40 (annual cooling degree days base 40), annual_cooling_degree_days_base_45 (annual cooling degree days base 45), annual_cooling_degree_days_base_50 (annual cooling degree days base 50), annual_cooling_degree_days_base_55 (annual cooling degree days base 55), annual_cooling_degree_days_base_57 (annual cooling degree days base 57), annual_cooling_degree_days_base_60 (annual cooling degree days base 60), …; 67 normals-winter fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): winter_cooling_degree_days_base_40 (winter cooling degree days base 40), winter_cooling_degree_days_base_45 (winter cooling degree days base 45), winter_cooling_degree_days_base_50 (winter cooling degree days base 50), winter_cooling_degree_days_base_55 (winter cooling degree days base 55), winter_cooling_degree_days_base_57 (winter cooling degree days base 57), winter_cooling_degree_days_base_60 (winter cooling degree days base 60), …; 67 normals-spring fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): spring_cooling_degree_days_base_40 (spring cooling degree days base 40), spring_cooling_degree_days_base_45 (spring cooling degree days base 45), spring_cooling_degree_days_base_50 (spring cooling degree days base 50), spring_cooling_degree_days_base_55 (spring cooling degree days base 55), spring_cooling_degree_days_base_57 (spring cooling degree days base 57), spring_cooling_degree_days_base_60 (spring cooling degree days base 60), …; 67 normals-summer fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): summer_cooling_degree_days_base_40 (summer cooling degree days base 40), summer_cooling_degree_days_base_45 (summer cooling degree days base 45), summer_cooling_degree_days_base_50 (summer cooling degree days base 50), summer_cooling_degree_days_base_55 (summer cooling degree days base 55), summer_cooling_degree_days_base_57 (summer cooling degree days base 57), summer_cooling_degree_days_base_60 (summer cooling degree days base 60), …; 67 normals-fall fields (NOAA U.S. Climate Normals 1991–2020, annual and seasonal station normals, by county): fall_cooling_degree_days_base_40 (fall cooling degree days base 40), fall_cooling_degree_days_base_45 (fall cooling degree days base 45), fall_cooling_degree_days_base_50 (fall cooling degree days base 50), fall_cooling_degree_days_base_55 (fall cooling degree days base 55), fall_cooling_degree_days_base_57 (fall cooling degree days base 57), fall_cooling_degree_days_base_60 (fall cooling degree days base 60), …; 15 hourly fields (NOAA U.S. Climate Normals 1991–2020, hourly station normals summarised over the year, by county): hourly_temperature (round the clock temperature), dew_point (dew point), sea_level_pressure (sea level pressure), cooling_degree_hours (cooling degree hours), heating_degree_hours (heating degree hours), clear_sky_share (share of clear hours), …; 51 b01001 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): pct_under_18 (share of residents aged 0 to 17), pct_5_to_14 (share of residents aged 5 to 14), b01001_001 (sex by age total), b01001_002 (sex by age male), b01001_003 (sex by age male 0 to 4 years), b01001_004 (sex by age male 5 to 9 years), …; 20 b11005 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): pct_households_with_people_under_18 (share of households with people aged 0 to 17), b11005_001 (households by presence of people 0 to 17 years by household type total), b11005_002 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years), b11005_003 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households), b11005_004 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households married-couple family), b11005_005 (households by presence of people 0 to 17 years by household type households with people 0 to 17 years family households other family), …; 3 b25003 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b25003_001 (tenure total), b25003_002 (tenure owner occupied), b25003_003 (tenure renter occupied); 13 b08303 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b08303_001 (travel time to work total), b08303_002 (travel time to work 0 to 4 minutes), b08303_003 (travel time to work 5 to 9 minutes), b08303_004 (travel time to work 10 to 14 minutes), b08303_005 (travel time to work 15 to 19 minutes), b08303_006 (travel time to work 20 to 24 minutes), …; 7 b23025 fields (U.S. Census Bureau, ACS 2020–2024 5-year estimates): b23025_001 (employment status for the population 16 years or older total), b23025_002 (employment status for the population 16 years or older in labor force), b23025_003 (employment status for the population 16 years or older in labor force civilian labor force), b23025_004 (employment status for the population 16 years or older in labor force civilian labor force employed), b23025_005 (employment status for the population 16 years or older in labor force civilian labor force unemployed), b23025_006 (employment status for the population 16 years or older in labor force armed forces), …; 30 buildings fields (Overture Maps buildings, release 2026-08-19.0, summed per area): buildings (buildings), multi_story_buildings (multi-story buildings), mid_rise_buildings (mid-rise buildings), high_rise_buildings (high-rise buildings), buildings_2_floors_plus (buildings with 2 published floors and up), buildings_4_floors_plus (buildings with 4 published floors and up), …; 13 building-types fields (Overture Maps buildings, release 2026-08-19.0, summed per area): residential_buildings (residential buildings), outbuilding_buildings (outbuilding buildings), commercial_buildings (commercial buildings), industrial_buildings (industrial buildings), education_buildings (education buildings), agricultural_buildings (agricultural buildings), …; 43 building-classes fields (Overture Maps buildings, release 2026-08-19.0, summed per area): house_class_buildings (house class buildings), detached_class_buildings (detached class buildings), residential_class_buildings (residential class buildings), garage_class_buildings (garage class buildings), apartments_class_buildings (apartments class buildings), shed_class_buildings (shed class buildings), …; 42 building-classes-2 fields (Overture Maps buildings, release 2026-08-19.0, summed per area): religious_class_buildings (religious class buildings), civic_class_buildings (civic class buildings), fire_station_class_buildings (fire station class buildings), bungalow_class_buildings (bungalow class buildings), pavilion_class_buildings (pavilion class buildings), hut_class_buildings (hut class buildings), …; 27 building-roofs fields (Overture Maps buildings, release 2026-08-19.0, summed per area): gabled_roof_buildings (buildings with a gabled roof), flat_roof_buildings (buildings with a flat roof), hipped_roof_buildings (buildings with a hipped roof), mansard_roof_buildings (buildings with a mansard roof), round_roof_buildings (buildings with a round roof), pyramidal_roof_buildings (buildings with a pyramidal roof), …; 11 building-facades fields (Overture Maps buildings, release 2026-08-19.0, summed per area): brick_facade_buildings (buildings with a brick facade), wood_facade_buildings (buildings with a wood facade), metal_facade_buildings (buildings with a metal facade), concrete_facade_buildings (buildings with a concrete facade), plaster_facade_buildings (buildings with a plaster facade), plastic_facade_buildings (buildings with a plastic facade), ….'}, 'area_columns': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 6, 'description': 'Census and NOAA facts added to EVERY ROW as columns named <kind>_<attribute>, each as "<kind>:<attribute>,<attribute>", e.g. "county:population,median_household_income" — the county / ZIP / metro / state figures beside each location, in the preview and in the file you buy. Free. The same attribute words area_where takes (listed there).'}}, 'additionalProperties': False}
request_list
Request a new list
Ask LocationLists to add a list we do not have yet. Use it when search_datasets finds nothing that fits, or the user wants a brand, place or kind of business we do not publish. BEFORE calling: ask the user whether to send the request, and ask for their email so we can tell them when the list is ready. Pass an email only if the user gave it to you in this conversation; never guess or invent one. Called with neither email nor email_declined, it sends nothing and asks for the email. The request goes to the LocationLists team, the same place as the request box on locationlists.com. We add new datasets every day and prioritize requested ones; there is no promised date. Free, nothing is charged.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['topic'], 'properties': {'name': {'type': 'string', 'description': "The user's name, if they gave it"}, 'email': {'type': 'string', 'description': "The user's email, only if they gave it, so we can tell them when the list is ready"}, 'topic': {'type': 'string', 'description': 'The list the user wants, in their words (2-200 characters)'}, 'company': {'type': 'string', 'description': "The user's company, if they gave it"}, 'details': {'type': 'string', 'description': 'Anything else they specified: places, fields needed (phone, website, email), timing'}, 'use_case': {'type': 'string', 'description': 'What they will use the list for, if they said (e.g. sales outreach, territory planning)'}, 'email_declined': {'type': 'boolean', 'description': 'True only when you asked the user for their email and they chose not to leave one'}}, 'additionalProperties': False}
search_datasets
Search location datasets
Find LocationLists datasets by brand, kind of business or industry (e.g. 'bobcat', 'restaurants', 'bank branches', 'dental practices', 'hardware stores'). Returns EVERY matching dataset, best first, with slug, name, business type, industry, record count, coverage, whether it can be searched by distance (distanceSearch), and page URL. A kind of business or an industry in the query matches every dataset of that kind, and `kinds` names it as a category that count_locations can combine into one answer. Each brand or chain is its own dataset. After finding one you can filter it by city, state, zip, any column, or a radius around a place (e.g. within 25 miles of Los Angeles, CA) when it has coordinates: use count_locations for how many match, and get_sample with the same filters for that count plus the list's fixed free sample rows, each marked matches_your_question. Both are free. To cover several chains near one place, pass datasets or category and a total to count_locations, and you get one answer, one price and one file. kind "register" searches LIVE public registers instead (a state's licensed child care, liquor licences, SNAP retailers…): each result's `source` is the key relate_locations takes as a set's opendata {source, state}, compared by distance (mode near). Registers are read live, never sold.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'kind': {'enum': ['list', 'register'], 'type': 'string', 'description': 'list (default): the lists we sell. register: live public registers read from their publisher, e.g. {"query": "child care", "kind": "register", "state": "NY"} — each result\'s source goes in relate_locations as {"opendata": {"source": "<source>", "state": "NY"}}.'}, 'limit': {'type': 'integer', 'maximum': 1000, 'minimum': 1, 'description': 'Max results (default: every match)'}, 'query': {'type': 'string', 'description': 'Free text: brand, kind of business, industry or product'}, 'state': {'type': 'string', 'description': 'With kind "register": prefer registers covering this state, e.g. "NY"'}, 'category': {'type': 'string', 'description': 'Restrict to one catalog category, industry or subcategory'}}, 'additionalProperties': False}
send_feedback
Send feedback
Send a message to the LocationLists team: wrong or missing data in a dataset, something that did not work, a pricing question, an idea, or anything else. Ask the user before sending and use their words. Ask for their email so the team can reply, and pass it only if they gave it; never guess or invent one. Called with neither email nor email_declined, it sends nothing and asks for the email. Free.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['message'], 'properties': {'email': {'type': 'string', 'description': "The user's email, only if they gave it"}, 'dataset': {'type': 'string', 'description': 'Dataset slug it concerns, if any, e.g. generac-dealers'}, 'message': {'type': 'string', 'description': "The feedback, in the user's words (5-4000 characters)"}, 'category': {'enum': ['bug', 'data quality', 'pricing', 'feature', 'other'], 'type': 'string', 'description': 'What it is about (default other)'}, 'email_declined': {'type': 'boolean', 'description': 'True only when you asked the user for their email and they chose not to leave one'}}, 'additionalProperties': False}
Changed
query_locations
Oct. 1, 2026, 2:42 a.m.
Changed
create_query_checkout
Oct. 1, 2026, 2:42 a.m.
Changed
check_order
Oct. 1, 2026, 2:42 a.m.
Changed
get_quote
Oct. 1, 2026, 2:42 a.m.
Changed
email_quote
Oct. 1, 2026, 2:42 a.m.
Changed
get_sample
Oct. 1, 2026, 2:42 a.m.
Changed
count_locations
Oct. 1, 2026, 2:42 a.m.
Changed
get_dataset
Oct. 1, 2026, 2:42 a.m.
Changed
cotenancy
Oct. 1, 2026, 2:42 a.m.
Changed
count_by_area
Oct. 1, 2026, 2:42 a.m.
Changed
relate_locations
Oct. 1, 2026, 2:42 a.m.
Changed
search_datasets
Oct. 1, 2026, 2:42 a.m.
Changed
count_locations
Sept. 27, 2026, 2:40 a.m.
Changed
relate_locations
Sept. 27, 2026, 2:40 a.m.
Changed
search_datasets
Sept. 27, 2026, 2:40 a.m.
Changed
query_locations
Sept. 21, 2026, 2:51 a.m.
Changed
create_query_checkout
Sept. 21, 2026, 2:51 a.m.
Changed
email_quote
Sept. 21, 2026, 2:51 a.m.
Changed
get_sample
Sept. 21, 2026, 2:51 a.m.
Changed
count_locations
Sept. 21, 2026, 2:51 a.m.
Changed
cotenancy
Sept. 21, 2026, 2:51 a.m.
Changed
count_by_area
Sept. 21, 2026, 2:51 a.m.
Changed
relate_locations
Sept. 21, 2026, 2:51 a.m.
Changed
query_locations
Sept. 19, 2026, 2:42 a.m.
Changed
create_query_checkout
Sept. 19, 2026, 2:42 a.m.
Changed
email_quote
Sept. 19, 2026, 2:42 a.m.
Changed
get_sample
Sept. 19, 2026, 2:42 a.m.
Changed
count_locations
Sept. 19, 2026, 2:42 a.m.
Changed
cotenancy
Sept. 19, 2026, 2:42 a.m.
Changed
count_by_area
Sept. 19, 2026, 2:42 a.m.