Quorum Data API
Resolve any IP address, MAID, or lat/long to a persistent household ID, then pull that household's segment visit history, geographic profile, and publisher exposure.
Base URL: https://api.quorum.live Auth: Bearer token in every request header Interactive Swagger UI →
Authentication
Every request (except /health) requires a Bearer token in the Authorization header:
Authorization: Bearer <your-token>
Your token is agency-scoped — all data returned is automatically filtered to your agency footprint. Tokens are stored as SHA-256 hashes server-side and cannot be retrieved after issuance. Store it in your secrets manager.
Key Concepts
| Concept | Description |
|---|---|
| Household ID | A persistent numeric identifier (H3 cell) representing a physical household. Stable across sessions and data sources. This is the primary join key across all enrichment endpoints. |
| MAID | Mobile Advertising Identifier. Multiple MAIDs map to a single household. The resolve endpoint returns all MAIDs associated with a resolved household. |
| Segment MD5 | Quorum's internal identifier for a tracked physical location (e.g. a specific restaurant or dealership). Use the catalog endpoint to enumerate all segments for your advertiser. |
| Advertiser ID | Quorum's internal integer ID for a brand or client. Required by catalog, visits, and stats endpoints. Provided by Quorum per campaign. |
Quick Start
curl https://api.quorum.live/health
# Returns: {"status":"ok","snowflake":"connected"}
curl -X POST https://api.quorum.live/v1/resolve \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"input_type":"ipv4","value":"72.14.192.1"}'
The front door of the API. Resolves an IP address, MAID, or lat/long to a Quorum household ID and returns all MAIDs associated with that household.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| input_type | string | Yes | "ipv4" | "maid" | "latlong" |
| value | string | Yes | The identifier to resolve. For latlong: "lat,lon" |
| max_distance_m | float | No | Latlong only. Max meters from H3 centroid to accept. Default 30m, max 100m. |
Response
| Field | Type | Description |
|---|---|---|
| household_id | string | Persistent Quorum household ID. Use this to call all enrichment endpoints. |
| centroid_distance_m | float|null | Distance from lat/long to H3 centroid. Only set for latlong input. |
| maid_count | integer | Number of MAIDs associated with this household. |
| maids[] | array | Each object: maid, primary_ip, census_block_id, state. |
Example
curl -X POST https://api.quorum.live/v1/resolve \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"input_type":"ipv4","value":"73.94.102.215"}'
Returns enrichment data for a specific household: geographic profile, segment visit history, and CTV/OTT publisher exposure. Use the household_id returned by /v1/resolve.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| household_id | string | The numeric household ID returned by /v1/resolve. |
Response
| Field | Description |
|---|---|
| household_id | Confirmed household ID |
| state, dma_name, zip_code | Geographic profile derived from census block data |
| segment_visits[] | Recent segment visits: segment_md5, location_name, visit_date, device_count |
| publisher_exposure[] | CTV/OTT impression history: site_domain, impression_count, last_seen |
Example
curl https://api.quorum.live/v1/households/631174766991295487 \ -H "Authorization: Bearer <token>"
Returns all tracked segments (physical locations) for a given advertiser. Each segment has a unique MD5 identifier used in downstream visit and stats endpoints.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| advertiser_id | integer | Yes | Quorum advertiser ID. Provided by Quorum per campaign. |
| limit | integer | No | Max records to return. Default 500. |
Response
Array of segment objects. Each contains: segment_md5, location_name, address, city, state, zip, latitude, longitude.
Example
curl "https://api.quorum.live/v1/segments/catalog?advertiser_id=1234" \ -H "Authorization: Bearer <token>"
Returns per-device visit records for a specific segment (deduplicated). Use for building audience lists or analyzing foot traffic patterns at a specific location.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| md5 | string | Segment MD5 from the catalog endpoint. |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| advertiser_id | integer | Yes | Quorum advertiser ID. |
| days | integer | No | Lookback window in days. Default 30, max 90. |
| limit | integer | No | Max records. Default 1000. |
Example
curl "https://api.quorum.live/v1/segments/abc123def456/visits?advertiser_id=1234&days=30" \ -H "Authorization: Bearer <token>"
Returns 30-day rolling visitor counts per segment for a given advertiser. Useful for quickly identifying which locations are seeing the most traffic without pulling full visit records.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| advertiser_id | integer | Yes | Quorum advertiser ID. |
Response
Array of objects: segment_md5, location_name, visitor_count_30d, device_count_30d.
Example
curl "https://api.quorum.live/v1/segments/stats?advertiser_id=1234" \ -H "Authorization: Bearer <token>"
Returns all distinct locations a household has visited, enriched with metadata from the Quorum location library. Cross-advertiser — not scoped to a single campaign. Deduplicated on segment MD5 so each physical location appears once with an aggregated visit count.
This endpoint queries 365 days of data by default against a 969M-row table. Responses may take 3–8 seconds for households with extensive visit history.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| household_id | integer | Quorum household ID (H3 cell, returned by /v1/resolve). |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| date_from | string (YYYY-MM-DD) | No | Start of lookback window. Default: 365 days ago. |
| date_to | string (YYYY-MM-DD) | No | End of lookback window. Default: today. |
| limit | integer | No | Max locations to return. Default 500, max 2000. Sorted by most recently visited. |
Response
Array of location objects sorted by last_seen descending. Each contains: segment_md5, name, brand, category, dma, zip, visits_30d (library-wide popularity), last_seen (YYYY-MM-DD), visit_days (distinct days this household was observed at this location).
Example
curl "https://api.quorum.live/v1/household/631270081205638655/footprint?limit=50" \ -H "Authorization: Bearer <token>"
Returns all advertisers available to your agency token. This is the bootstrap call — use it to populate advertiser pickers and to get the advertiser_id values required by all /v1/performance/* endpoints. No legacy Snowflake reads required.
Query Parameters
None. Results are automatically scoped to your agency.
Response
| Field | Type | Description |
|---|---|---|
| agency_id | integer | Quorum agency ID. |
| agency_name | string|null | Human-readable agency name. |
| advertiser_id | integer | Use this as advertiser_id in all performance endpoints. |
| advertiser_name | string|null | Human-readable advertiser name. ~100% populated. |
Example
curl "https://api.quorum.live/v1/advertisers" \ -H "Authorization: Bearer <token>"
Campaign performance broken down by publisher and supply source. Returns daily rows with impressions, device reach, household reach, visitors, visit rate, multiplier, and web metrics per publisher. Primary input for publisher-level optimization and reporting.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| advertiser_id | integer | Yes | Quorum advertiser ID. |
| date_from | string (YYYY-MM-DD) | No | Default: 30 days ago. |
| date_to | string (YYYY-MM-DD) | No | Default: today. |
| io_id | string | No | Filter to a single insertion order. |
| li_id | string | No | Filter to a single line item. |
| limit | integer | No | Default 5000, max 50000. Sorted by date desc, impressions desc. |
Response
Shared base fields on every PERF row: log_date, io_id, io_name, li_id, li_name, advertiser_id, platform_name, impressions, device_reach, household_reach, visitors, visit_rate, panel_reach, multiplier, web_visitors, total_page_views, web_visit_rate.
Publisher-specific fields: publisher, supply_vendor, publisher_code, site_id, publisher_id, supply_type_id.
Example
curl "https://api.quorum.live/v1/performance/publishers?advertiser_id=1234&date_from=2025-01-01&io_id=IO-456" \ -H "Authorization: Bearer <token>"
Campaign performance broken down by geography (DMA and ZIP). Returns daily rows with impressions, reach, household reach, visitors, visit rate, and multiplier per geographic unit. Use for regional pacing analysis and DMA-level reporting.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| advertiser_id | integer | Yes | Quorum advertiser ID. |
| date_from | string (YYYY-MM-DD) | No | Default: 30 days ago. |
| date_to | string (YYYY-MM-DD) | No | Default: today. |
| io_id | string | No | Filter to a single insertion order. |
| li_id | string | No | Filter to a single line item. |
| dma | string | No | Filter to a specific DMA code or name. |
| limit | integer | No | Default 5000, max 50000. |
Response
All shared base fields plus geo-specific: dma, zip, census_block_id.
Example
curl "https://api.quorum.live/v1/performance/geo?advertiser_id=1234&dma=Boston" \ -H "Authorization: Bearer <token>"
Web pixel performance broken down by traffic source URL. Returns daily rows with impressions, reach, web visitors, and page views per URL. Use for understanding which referral sources and landing pages are driving the most web activity.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| advertiser_id | integer | Yes | Quorum advertiser ID. |
| date_from | string (YYYY-MM-DD) | No | Default: 30 days ago. |
| date_to | string (YYYY-MM-DD) | No | Default: today. |
| io_id | string | No | Filter to a single insertion order. |
| li_id | string | No | Filter to a single line item. |
| limit | integer | No | Default 5000, max 50000. Sorted by web_visitors desc. |
Response
All shared base fields plus traffic-specific: url, url_type.
Example
curl "https://api.quorum.live/v1/performance/traffic?advertiser_id=1234&date_from=2025-03-01" \ -H "Authorization: Bearer <token>"
Campaign performance broken down by creative unit. Returns daily rows with impressions, reach, visitors, visit rate, and web metrics per creative. Use for A/B analysis and creative rotation reporting.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| advertiser_id | integer | Yes | Quorum advertiser ID. |
| date_from | string (YYYY-MM-DD) | No | Default: 30 days ago. |
| date_to | string (YYYY-MM-DD) | No | Default: today. |
| io_id | string | No | Filter to a single insertion order. |
| li_id | string | No | Filter to a single line item. |
| limit | integer | No | Default 5000, max 50000. |
Response
All shared base fields plus creative-specific: creative_id, creative_name, creative_size.
Example
curl "https://api.quorum.live/v1/performance/creative?advertiser_id=1234&li_id=LI-789" \ -H "Authorization: Bearer <token>"
Household-level attribution data. Each row represents a household that received an impression and subsequently visited a tracked location within the 28-day attribution window. The primary input for reach/frequency analysis and household deduplication across line items.
Attribution window: 28 days. A visit is attributed if it occurs within 28 days of the first impression to that household.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| advertiser_id | integer | Yes | Quorum advertiser ID. |
| date_from | string (YYYY-MM-DD) | No | Default: 30 days ago. |
| date_to | string (YYYY-MM-DD) | No | Default: today. |
| io_id | string | No | Filter to a single insertion order. |
| li_id | string | No | Filter to a single line item. |
| limit | integer | No | Default 10000, max 100000. Sorted by date desc. |
Response
All shared base fields (note: household_reach is not present on this table — each row IS a household). Plus household-specific: household_id, census_block_id.
Example
curl "https://api.quorum.live/v1/performance/households?advertiser_id=1234&io_id=IO-456&limit=50000" \ -H "Authorization: Bearer <token>"
Returns the advertiser's capability flags from ADVERTISER_CONFIG — whether they have store attribution, web attribution, the attribution window in days, and report type IDs. Always call this first before any visit-based endpoint so you know what data to expect.
Response Fields
| Field | Type | Description |
|---|---|---|
| has_store | boolean | True if report_type_ids contains 1, 4, or 6 (location/OOH/web-to-store). |
| has_web | boolean | True if report_type_ids contains 2 or 5 (web visits / OOH-to-web). |
| attribution_window | integer | Days from ad exposure to visit that count as attributed. Default 28. |
| config_status | string | ACTIVE, IMPRESSIONS_ONLY, or NOT_CONFIGURED. |
Example
curl "https://api.quorum.live/v1/advertisers/1234/config" -H "Authorization: Bearer <token>"
Probes each PERF_BY_* table for data existence in the requested date range and combines with config flags. Use as a gating call before rendering a report UI — avoids rendering empty charts.
Response Fields
| Field | Description |
|---|---|
| impressions | True if PERF_BY_PUBLISHER has rows in range. |
| store_visits / web_visits | From config flags — not a data probe. |
| publisher / geo / creative / traffic / household | True if corresponding PERF_BY_* table has rows in range. |
| lift | True if has_store AND impressions are present. |
Example
curl "https://api.quorum.live/v1/advertisers/1234/tab-availability?date_from=2025-10-01&date_to=2025-12-31" \ -H "Authorization: Bearer <token>"
Headline metrics for an advertiser over a date range. Impressions and reach from PERF_BY_PUBLISHER. Store and web visits from HH attribution tables (last-touch, 28-day window). All visit counts are multiplier-scaled to estimated total reach.
Response Fields
| Field | Description |
|---|---|
| impressions / device_reach / household_reach | From PERF_BY_PUBLISHER. household_reach = distinct households that received an impression. |
| store_panel_reach | Observed households that both received an impression AND visited a tracked location. |
| store_visits | store_panel_reach × multiplier = estimated total store visits. |
| multiplier / multiplier_grain / multiplier_significant | Wilson CI coverage multiplier. Grain: LINE_ITEM → CAMPAIGN → ADVERTISER → 8.0x global. |
| hh_resolution_rate | Fraction of impressions that resolved to a household (the inverse of the multiplier). |
Example
curl "https://api.quorum.live/v1/advertisers/1234/summary?date_from=2025-10-01&date_to=2025-12-31" \ -H "Authorization: Bearer <token>"
Day-by-day impressions and estimated visit counts. Impressions from PERF_BY_PUBLISHER aggregated by LOG_DATE. Visits from HH attribution tables by visit date. Multiplier applied to scale to estimated total. Use to power trend charts.
Response Fields (per day)
| Field | Description |
|---|---|
| log_date | YYYY-MM-DD. |
| impressions / device_reach / household_reach | From PERF_BY_PUBLISHER for that date. |
| store_visits / web_visits | Multiplier-scaled estimated visits for that date. |
| store_visit_rate / web_visit_rate | Visits / impressions (as decimal). |
Example
curl "https://api.quorum.live/v1/advertisers/1234/timeseries?date_from=2025-10-01&date_to=2025-12-31" \ -H "Authorization: Bearer <token>"
Performance grouped by insertion order (campaign). Aggregates PERF_BY_PUBLISHER to IO level. Store and web visits joined from HH attribution tables. Coverage multiplier applied per campaign where statistically significant, otherwise advertiser grain.
Response Fields (per campaign)
| Field | Description |
|---|---|
| io_id / io_name | Insertion order identifier and name. |
| impressions / device_reach / household_reach | Aggregated across all line items in this IO. |
| store_visits / web_visits | Estimated total visits after multiplier scaling. |
| first_date / last_date | Earliest and latest LOG_DATE with data for this IO. |
Example
curl "https://api.quorum.live/v1/advertisers/1234/campaigns?date_from=2025-10-01&date_to=2025-12-31" \ -H "Authorization: Bearer <token>"
Performance grouped by line item. Aggregates PERF_BY_PUBLISHER to LI level with per-LI coverage multipliers. Provides the finest grain of campaign performance and is the source of truth for visit rate optimization.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| advertiser_id | integer | Yes (path) | Quorum advertiser ID. |
| io_id | string | No | Filter to a single campaign. |
| date_from / date_to | YYYY-MM-DD | No | Default: last 30 days. |
Example
curl "https://api.quorum.live/v1/advertisers/1234/lineitems?date_from=2025-10-01&io_id=IO-456" \ -H "Authorization: Bearer <token>"
Exposed vs. control visit rate lift. Identifies households exposed to this advertiser's impressions (via HOUSEHOLD_ID_CORE), computes what fraction visited a tracked store or web property within the attribution window, and compares against the non-exposed visiting population. Only available for advertisers with has_store = true.
Response Fields
| Field | Description |
|---|---|
| exposed_hh | Count of distinct households that received at least one impression. |
| exposed_store_visit_rate | Fraction of exposed households that visited a tracked store. |
| control_store_visit_rate | Fraction of non-exposed store visitors (proxy for baseline). |
| lift_pct | (exposed_rate - control_rate) / control_rate × 100. Positive = ad drove incremental visits. |
| confidence | Simple heuristic confidence score (0–99) based on exposed household sample size. |
Example
curl "https://api.quorum.live/v1/advertisers/1234/lift?date_from=2025-10-01&date_to=2025-12-31" \ -H "Authorization: Bearer <token>"
Store visit breakdown by brand and location category. Reads HH_STORE_VISIT_ATTRIBUTION directly (last-touch, 28-day window). Shows which brands within an advertiser's footprint are driving the most visits, and how quickly households convert after seeing an ad.
Response Fields
| Field | Description |
|---|---|
| total_visits / unique_households | Summary across all brands. |
| brands[].brand / .category | Brand name and vertical/category from the location catalog. |
| brands[].visits | Raw observed panel visits (not multiplied — brand breakdown is pre-scale). |
| brands[].avg_days_to_visit | Mean days from first impression to store visit for this brand. |
Example
curl "https://api.quorum.live/v1/advertisers/1234/store-visits/brands?date_from=2025-10-01&date_to=2025-12-31" \ -H "Authorization: Bearer <token>"
Location Attribution & Insights
This endpoint group gives you direct access to Quorum's location intelligence layer — the same data that powers the Optimizer dashboard, exposed as structured API responses you can pipe into your own models, spreadsheets, or activation platforms.
Everything here is scoped to your advertiser's configured locations. Quorum tracks physical visits using a panel of mobile devices and resolves each observed device to a persistent household identity. That resolution unlocks three things you can't get from raw MAID files alone: deduplication at the household level, a high-quality home IPv4 address, and pre-computed geographic trade area profiles.
The Four Endpoints
| Endpoint | What it answers |
|---|---|
| GET .../locations | What locations am I tracking? Returns the full catalog with metadata, coordinates, and 30/60-day visit counts. |
| GET .../locations/{md5}/visits | Who visited this location? Returns every device observation with household ID, visit date/time, and IPv4 enrichment — paginated for bulk export. |
| GET .../locations/{md5}/visitor-geography | Where do visitors come from? Returns a pre-indexed trade area breakdown by home census block with visitor index scores. |
| GET .../locations/{md5}/nearby-competitors | What's nearby? Finds all locations in the same category within a configurable radius, ranked by distance. |
Typical Workflow
Start with /locations to pull your segment catalog and identify the segment_md5 values you care about. Then call /visits to export raw visit records for audience building or attribution analysis. Use /visitor-geography to understand trade area reach for geo-targeting. Use /nearby-competitors to map the competitive landscape around a specific location.
Privacy & Household IDs
The household_id field in visit records is designed to be useful for matching and deduplication without exposing geographic coordinates. External API callers receive a 32-character HMAC-hashed identifier — stable across calls and consistent for a given household, but not reversible to a lat/lon. Internal Quorum users receive the raw numeric ID. The lowest-granularity geographic field available externally is census_block_id.
Returns all location segments configured for an advertiser — both POI (physical retail/venue) and Attraction (geo-fence zone) types — with full metadata and recent visit volume. This is the starting point for any location workflow: use it to enumerate segment IDs, check coverage, and filter down to the locations you want to analyze.
Segments with zero visits in the 60-day window are included by default. Use min_households=1 to filter to active locations only.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| advertiser_id | integer | Your Quorum advertiser ID (provided by Quorum per campaign). |
Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| location_type | string | — | Filter to POI (physical locations) or ATTRACTION (geo-fence zones). Omit to return both. |
| brand | string | — | Case-insensitive exact brand filter (e.g. Chipotle). |
| min_households | integer | 0 | Minimum 60-day unique household count. Set to 1 to exclude zero-traffic locations. |
| limit | integer | 5000 | Max records to return. Max: 50,000. |
Response Fields
| Field | Type | Description |
|---|---|---|
| segment_md5 | string | Quorum's unique identifier for this location. Use as the path parameter for the visit, geography, and competitor endpoints. |
| location_type | string | POI or ATTRACTION. |
| name / brand / category | string|null | Location name, parent brand, and category/vertical. |
| lat / lon | float|null | Centroid coordinates of the location. Null for some zone-type Attractions. |
| address / city / state / zip_code | string|null | Street-level address components. |
| dma_name / region | string|null | DMA and regional classification from the location library. |
| visits_30d | integer|null | Raw observed panel visits in the last 30 days (not scaled). |
| household_count_60d | integer | Unique households observed at this location in the last 60 days. Zero if no activity. |
| maid_count_60d | integer | Unique device IDs (MAIDs) observed at this location in the last 60 days. |
Example
curl "https://api.quorum.live/v1/advertisers/1234/locations?location_type=POI&min_households=1" \ -H "Authorization: Bearer <token>"
curl "https://api.quorum.live/v1/advertisers/1234/locations?brand=Chipotle&limit=200" \ -H "Authorization: Bearer <token>"
Returns raw device visit records for a single location within a date range. Each row represents one device observation at the location's geo-fence, joined to Quorum's identity graph for household resolution and IPv4 enrichment. This is the primary endpoint for bulk audience export and attribution analysis.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| advertiser_id | integer | Your Quorum advertiser ID. |
| segment_md5 | string | Location identifier from the /locations catalog. |
Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| date_from | date | 60 days ago | Start of visit window (YYYY-MM-DD). |
| date_to | date | today | End of visit window (YYYY-MM-DD). |
| limit | integer | 100,000 | Rows per page. Max: 1,000,000. |
| offset | integer | 0 | Row offset for pagination. Increment by limit to fetch subsequent pages. |
Response Fields
| Field | Type | Description |
|---|---|---|
| segment_md5 | string | The location this record belongs to. |
| maid | string|null | Mobile Advertising ID observed at the geo-fence. |
| household_id | string|null | Quorum household identifier. For external callers: a stable 32-char opaque key (HMAC-SHA256), consistent for the same household across calls, safe for deduplication and matching. Null if device could not be resolved to a household. |
| visit_date | date | Date the device was observed at the location. |
| visit_timestamp | datetime|null | Precise timestamp when available. |
| capture_ip | string|null | IP address observed at capture time (device-level, not household-level). |
| hh_primary_ip | string|null | Best-quality household IPv4 from the identity graph. Selected as the IP with the highest observation count among IPs seen in the last 30 days for this device. Null if no qualifying IP found. |
| ip_last_seen | date|null | Most recent date hh_primary_ip was observed. Use as a freshness signal. |
| ip_observation_count | integer|null | Number of times this IP was observed for this device. Higher values indicate greater confidence. |
| capture_census_block | string|null | Census block of the location (where the device was observed). |
| hh_census_block | string|null | Estimated home census block of the household from the identity graph. Lowest geographic granularity provided. |
| capture_lat / capture_lon | float|null | Coordinates of the capture event when available. |
Pagination: Results are sorted visit_date descending, MAID ascending. Use offset to page through large date ranges. Most location segments return tens of thousands of rows per month — set a wide date range and iterate with offset if needed.
Example — First Page
curl "https://api.quorum.live/v1/advertisers/1234/locations/abc123def456.../visits?date_from=2025-01-01&date_to=2025-03-31&limit=100000&offset=0" \ -H "Authorization: Bearer <token>"
Example — Next Page
curl "https://api.quorum.live/v1/advertisers/1234/locations/abc123def456.../visits?date_from=2025-01-01&date_to=2025-03-31&limit=100000&offset=100000" \ -H "Authorization: Bearer <token>"
Returns a pre-computed trade area profile for a location — a ranked breakdown of home census blocks from which visitors originate, along with visitor index scores that indicate which areas over- or under-index as visitor origins relative to their population size. No date parameters needed: this reads from a 90-day rolling pre-indexed table built by the Quorum pipeline.
This endpoint is ideal for understanding catchment area, planning geo-targeted ad buys, or building audience models that prioritize high-index neighborhoods.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| advertiser_id | integer | Your Quorum advertiser ID. |
| segment_md5 | string | Location identifier from the /locations catalog. |
Response Fields
| Field | Type | Description |
|---|---|---|
| segment_md5 | string | The location this geography profile belongs to. |
| window_start / window_end | date|null | Actual start and end of the pipeline's computation window (nominally 90 days). |
| total_devices_at_location | integer | Total unique devices observed at this location during the window — the denominator for index calculations. |
| census_blocks[] | array | Ranked list of home census blocks, sorted by visitor index descending (highest-indexing first). |
| .census_block_id | string | 15-digit FIPS census block code identifying the home area. |
| .zip_code | string|null | ZIP code corresponding to this census block. |
| .device_count | integer | Number of unique devices from this census block observed at the location. |
| .cblock_population | integer|null | Total 2023 census population for this block (denominator for index). |
| .cblock_households | float|null | Estimated household count for this census block (2023 census). |
| .cblock_visitor_index | float|null | Visitor index at census block level. A value of 1.5 means this block sends 50% more visitors than expected based on its population share. Values above 1.2 are strong signals; below 0.8 under-index. |
| .zip_visitor_index | float|null | Same index aggregated to ZIP code level — useful when block-level counts are small. |
Example
curl "https://api.quorum.live/v1/advertisers/1234/locations/abc123def456.../visitor-geography" \ -H "Authorization: Bearer <token>"
Finds all locations in Quorum's reference library that match a category pattern and fall within a configurable radius of your anchor location. Results are ranked by distance (nearest first) and include 60-day household visit counts. Your advertiser's own configured locations are automatically excluded from results.
Use this to map competitive density, compare your traffic footprint against nearby competitors, or identify whitespace in a market.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| advertiser_id | integer | Your Quorum advertiser ID. |
| segment_md5 | string | The anchor location — competitors will be found relative to its coordinates. |
Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| category_pattern | string (required) | — | Category to search. Supports * or % wildcards. A bare word matches any category containing that string (e.g. restaurant matches "Fast Food Restaurant", "QSR Restaurant", etc.). |
| radius_miles | float | auto | Search radius in miles (0.1–100). If omitted, a smart default is chosen based on the category (see table below). Max: 100 miles. |
| limit | integer | 200 | Max results. Max: 2,000. |
Smart Default Radii
When radius_miles is omitted, the API picks a sensible radius based on keywords in your category_pattern:
| Category keywords | Default radius |
|---|---|
| auto, dealer, vehicle, car, truck | 25 miles |
| hotel, lodging, motel | 15 miles |
| home improvement, hardware, furniture, appliance | 10 miles |
| gym, fitness, sport | 8 miles |
| restaurant, dining | 5 miles |
| grocery, pharmacy, cafe | 3 miles |
| gas, fuel | 2 miles |
| (all others) | 5 miles |
Response Fields
| Field | Type | Description |
|---|---|---|
| segment_md5 | string | Location identifier for the competitor. |
| name / brand / category | string|null | Competitor name, brand, and category. |
| distance_miles | float | Straight-line distance from the anchor location in miles. Results are sorted by this field ascending. |
| lat / lon | float|null | Competitor coordinates. |
| address / city / state | string|null | Street address of the competitor. |
| dma_name | string|null | DMA name from the location library. |
| visits_30d | integer|null | Panel visits to this competitor in the last 30 days. |
| household_count_60d | integer | Unique households observed at this competitor in the last 60 days. |
Wildcard Examples
| category_pattern | Matches |
|---|---|
| restaurant | Any category containing "restaurant" (case-insensitive) |
| restaur* | Categories starting with "restaur" |
| *QSR* | Explicit contains-match for "QSR" |
| *auto dealer* | Categories containing the phrase "auto dealer" |
Example — All restaurants within 3 miles
curl "https://api.quorum.live/v1/advertisers/1234/locations/abc123def456.../nearby-competitors?category_pattern=restaurant&radius_miles=3" \ -H "Authorization: Bearer <token>"
Example — Auto dealers (smart default radius of 25 miles)
curl "https://api.quorum.live/v1/advertisers/1234/locations/abc123def456.../nearby-competitors?category_pattern=auto+dealer" \ -H "Authorization: Bearer <token>"
Error Codes
| Code | Meaning |
|---|---|
| 401 | Missing or invalid Bearer token |
| 403 | Token valid but lacks permission for this operation |
| 404 | Household or segment not found in Quorum's identity graph |
| 429 | Rate limit exceeded. Default: 60 requests/minute per token. |
| 500 | Snowflake query error — contact api@quorum.live |
Data Freshness
| Data Type | Freshness |
|---|---|
| Segment visit data | Updated daily. Rolling 30-day counts have a ~5-day lag. |
| CTV/OTT impressions | Near real-time (pipeline dependent) |
| Household identity graph | Updated on Quorum's enrichment schedule |
| Geographic crosswalk | Static — updated quarterly |