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

ConceptDescription
Household IDA 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.
MAIDMobile Advertising Identifier. Multiple MAIDs map to a single household. The resolve endpoint returns all MAIDs associated with a resolved household.
Segment MD5Quorum'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 IDQuorum'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"}'
POST/v1/resolveBearer

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

FieldTypeRequiredDescription
input_typestringYes"ipv4" | "maid" | "latlong"
valuestringYesThe identifier to resolve. For latlong: "lat,lon"
max_distance_mfloatNoLatlong only. Max meters from H3 centroid to accept. Default 30m, max 100m.

Response

FieldTypeDescription
household_idstringPersistent Quorum household ID. Use this to call all enrichment endpoints.
centroid_distance_mfloat|nullDistance from lat/long to H3 centroid. Only set for latlong input.
maid_countintegerNumber of MAIDs associated with this household.
maids[]arrayEach 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"}'
GET/v1/households/{household_id}Bearer

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

ParameterTypeDescription
household_idstringThe numeric household ID returned by /v1/resolve.

Response

FieldDescription
household_idConfirmed household ID
state, dma_name, zip_codeGeographic 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>"
GET/v1/segments/catalogBearer

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

ParameterTypeRequiredDescription
advertiser_idintegerYesQuorum advertiser ID. Provided by Quorum per campaign.
limitintegerNoMax 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>"
GET/v1/segments/{md5}/visitsBearer

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

ParameterTypeDescription
md5stringSegment MD5 from the catalog endpoint.

Query Parameters

ParameterTypeRequiredDescription
advertiser_idintegerYesQuorum advertiser ID.
daysintegerNoLookback window in days. Default 30, max 90.
limitintegerNoMax records. Default 1000.

Example

curl "https://api.quorum.live/v1/segments/abc123def456/visits?advertiser_id=1234&days=30" \
  -H "Authorization: Bearer <token>"
GET/v1/segments/statsBearer

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

ParameterTypeRequiredDescription
advertiser_idintegerYesQuorum 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>"
GET/v1/household/{household_id}/footprintBearer

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

ParameterTypeDescription
household_idintegerQuorum household ID (H3 cell, returned by /v1/resolve).

Query Parameters

ParameterTypeRequiredDescription
date_fromstring (YYYY-MM-DD)NoStart of lookback window. Default: 365 days ago.
date_tostring (YYYY-MM-DD)NoEnd of lookback window. Default: today.
limitintegerNoMax 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>"
GET/v1/advertisersBearer

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

FieldTypeDescription
agency_idintegerQuorum agency ID.
agency_namestring|nullHuman-readable agency name.
advertiser_idintegerUse this as advertiser_id in all performance endpoints.
advertiser_namestring|nullHuman-readable advertiser name. ~100% populated.

Example

curl "https://api.quorum.live/v1/advertisers" \
  -H "Authorization: Bearer <token>"
GET/v1/performance/publishersBearer

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

ParameterTypeRequiredDescription
advertiser_idintegerYesQuorum advertiser ID.
date_fromstring (YYYY-MM-DD)NoDefault: 30 days ago.
date_tostring (YYYY-MM-DD)NoDefault: today.
io_idstringNoFilter to a single insertion order.
li_idstringNoFilter to a single line item.
limitintegerNoDefault 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>"
GET/v1/performance/geoBearer

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

ParameterTypeRequiredDescription
advertiser_idintegerYesQuorum advertiser ID.
date_fromstring (YYYY-MM-DD)NoDefault: 30 days ago.
date_tostring (YYYY-MM-DD)NoDefault: today.
io_idstringNoFilter to a single insertion order.
li_idstringNoFilter to a single line item.
dmastringNoFilter to a specific DMA code or name.
limitintegerNoDefault 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>"
GET/v1/performance/trafficBearer

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

ParameterTypeRequiredDescription
advertiser_idintegerYesQuorum advertiser ID.
date_fromstring (YYYY-MM-DD)NoDefault: 30 days ago.
date_tostring (YYYY-MM-DD)NoDefault: today.
io_idstringNoFilter to a single insertion order.
li_idstringNoFilter to a single line item.
limitintegerNoDefault 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>"
GET/v1/performance/creativeBearer

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

ParameterTypeRequiredDescription
advertiser_idintegerYesQuorum advertiser ID.
date_fromstring (YYYY-MM-DD)NoDefault: 30 days ago.
date_tostring (YYYY-MM-DD)NoDefault: today.
io_idstringNoFilter to a single insertion order.
li_idstringNoFilter to a single line item.
limitintegerNoDefault 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>"
GET/v1/performance/householdsBearer

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

ParameterTypeRequiredDescription
advertiser_idintegerYesQuorum advertiser ID.
date_fromstring (YYYY-MM-DD)NoDefault: 30 days ago.
date_tostring (YYYY-MM-DD)NoDefault: today.
io_idstringNoFilter to a single insertion order.
li_idstringNoFilter to a single line item.
limitintegerNoDefault 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>"
GET/v1/advertisers/{advertiser_id}/configBearer

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

FieldTypeDescription
has_storebooleanTrue if report_type_ids contains 1, 4, or 6 (location/OOH/web-to-store).
has_webbooleanTrue if report_type_ids contains 2 or 5 (web visits / OOH-to-web).
attribution_windowintegerDays from ad exposure to visit that count as attributed. Default 28.
config_statusstringACTIVE, IMPRESSIONS_ONLY, or NOT_CONFIGURED.

Example

curl "https://api.quorum.live/v1/advertisers/1234/config" -H "Authorization: Bearer <token>"
GET/v1/advertisers/{advertiser_id}/tab-availabilityBearer

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

FieldDescription
impressionsTrue if PERF_BY_PUBLISHER has rows in range.
store_visits / web_visitsFrom config flags — not a data probe.
publisher / geo / creative / traffic / householdTrue if corresponding PERF_BY_* table has rows in range.
liftTrue 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>"
GET/v1/advertisers/{advertiser_id}/summaryBearer

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

FieldDescription
impressions / device_reach / household_reachFrom PERF_BY_PUBLISHER. household_reach = distinct households that received an impression.
store_panel_reachObserved households that both received an impression AND visited a tracked location.
store_visitsstore_panel_reach × multiplier = estimated total store visits.
multiplier / multiplier_grain / multiplier_significantWilson CI coverage multiplier. Grain: LINE_ITEM → CAMPAIGN → ADVERTISER → 8.0x global.
hh_resolution_rateFraction 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>"
GET/v1/advertisers/{advertiser_id}/timeseriesBearer

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)

FieldDescription
log_dateYYYY-MM-DD.
impressions / device_reach / household_reachFrom PERF_BY_PUBLISHER for that date.
store_visits / web_visitsMultiplier-scaled estimated visits for that date.
store_visit_rate / web_visit_rateVisits / 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>"
GET/v1/advertisers/{advertiser_id}/campaignsBearer

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)

FieldDescription
io_id / io_nameInsertion order identifier and name.
impressions / device_reach / household_reachAggregated across all line items in this IO.
store_visits / web_visitsEstimated total visits after multiplier scaling.
first_date / last_dateEarliest 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>"
GET/v1/advertisers/{advertiser_id}/lineitemsBearer

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

ParameterTypeRequiredDescription
advertiser_idintegerYes (path)Quorum advertiser ID.
io_idstringNoFilter to a single campaign.
date_from / date_toYYYY-MM-DDNoDefault: 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>"
GET/v1/advertisers/{advertiser_id}/liftBearer

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

FieldDescription
exposed_hhCount of distinct households that received at least one impression.
exposed_store_visit_rateFraction of exposed households that visited a tracked store.
control_store_visit_rateFraction of non-exposed store visitors (proxy for baseline).
lift_pct(exposed_rate - control_rate) / control_rate × 100. Positive = ad drove incremental visits.
confidenceSimple 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>"
GET/v1/advertisers/{advertiser_id}/store-visits/brandsBearer

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

FieldDescription
total_visits / unique_householdsSummary across all brands.
brands[].brand / .categoryBrand name and vertical/category from the location catalog.
brands[].visitsRaw observed panel visits (not multiplied — brand breakdown is pre-scale).
brands[].avg_days_to_visitMean 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

EndpointWhat it answers
GET .../locationsWhat locations am I tracking? Returns the full catalog with metadata, coordinates, and 30/60-day visit counts.
GET .../locations/{md5}/visitsWho visited this location? Returns every device observation with household ID, visit date/time, and IPv4 enrichment — paginated for bulk export.
GET .../locations/{md5}/visitor-geographyWhere do visitors come from? Returns a pre-indexed trade area breakdown by home census block with visitor index scores.
GET .../locations/{md5}/nearby-competitorsWhat'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.

GET/v1/advertisers/{advertiser_id}/locationsBearer

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

ParameterTypeDescription
advertiser_idintegerYour Quorum advertiser ID (provided by Quorum per campaign).

Query Parameters

ParameterTypeDefaultDescription
location_typestringFilter to POI (physical locations) or ATTRACTION (geo-fence zones). Omit to return both.
brandstringCase-insensitive exact brand filter (e.g. Chipotle).
min_householdsinteger0Minimum 60-day unique household count. Set to 1 to exclude zero-traffic locations.
limitinteger5000Max records to return. Max: 50,000.

Response Fields

FieldTypeDescription
segment_md5stringQuorum's unique identifier for this location. Use as the path parameter for the visit, geography, and competitor endpoints.
location_typestringPOI or ATTRACTION.
name / brand / categorystring|nullLocation name, parent brand, and category/vertical.
lat / lonfloat|nullCentroid coordinates of the location. Null for some zone-type Attractions.
address / city / state / zip_codestring|nullStreet-level address components.
dma_name / regionstring|nullDMA and regional classification from the location library.
visits_30dinteger|nullRaw observed panel visits in the last 30 days (not scaled).
household_count_60dintegerUnique households observed at this location in the last 60 days. Zero if no activity.
maid_count_60dintegerUnique 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>"
GET/v1/advertisers/{advertiser_id}/locations/{segment_md5}/visitsBearer

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

ParameterTypeDescription
advertiser_idintegerYour Quorum advertiser ID.
segment_md5stringLocation identifier from the /locations catalog.

Query Parameters

ParameterTypeDefaultDescription
date_fromdate60 days agoStart of visit window (YYYY-MM-DD).
date_todatetodayEnd of visit window (YYYY-MM-DD).
limitinteger100,000Rows per page. Max: 1,000,000.
offsetinteger0Row offset for pagination. Increment by limit to fetch subsequent pages.

Response Fields

FieldTypeDescription
segment_md5stringThe location this record belongs to.
maidstring|nullMobile Advertising ID observed at the geo-fence.
household_idstring|nullQuorum 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_datedateDate the device was observed at the location.
visit_timestampdatetime|nullPrecise timestamp when available.
capture_ipstring|nullIP address observed at capture time (device-level, not household-level).
hh_primary_ipstring|nullBest-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_seendate|nullMost recent date hh_primary_ip was observed. Use as a freshness signal.
ip_observation_countinteger|nullNumber of times this IP was observed for this device. Higher values indicate greater confidence.
capture_census_blockstring|nullCensus block of the location (where the device was observed).
hh_census_blockstring|nullEstimated home census block of the household from the identity graph. Lowest geographic granularity provided.
capture_lat / capture_lonfloat|nullCoordinates 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>"
GET/v1/advertisers/{advertiser_id}/locations/{segment_md5}/visitor-geographyBearer

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

ParameterTypeDescription
advertiser_idintegerYour Quorum advertiser ID.
segment_md5stringLocation identifier from the /locations catalog.

Response Fields

FieldTypeDescription
segment_md5stringThe location this geography profile belongs to.
window_start / window_enddate|nullActual start and end of the pipeline's computation window (nominally 90 days).
total_devices_at_locationintegerTotal unique devices observed at this location during the window — the denominator for index calculations.
census_blocks[]arrayRanked list of home census blocks, sorted by visitor index descending (highest-indexing first).
  .census_block_idstring15-digit FIPS census block code identifying the home area.
  .zip_codestring|nullZIP code corresponding to this census block.
  .device_countintegerNumber of unique devices from this census block observed at the location.
  .cblock_populationinteger|nullTotal 2023 census population for this block (denominator for index).
  .cblock_householdsfloat|nullEstimated household count for this census block (2023 census).
  .cblock_visitor_indexfloat|nullVisitor 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_indexfloat|nullSame 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>"
GET/v1/advertisers/{advertiser_id}/locations/{segment_md5}/nearby-competitorsBearer

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

ParameterTypeDescription
advertiser_idintegerYour Quorum advertiser ID.
segment_md5stringThe anchor location — competitors will be found relative to its coordinates.

Query Parameters

ParameterTypeDefaultDescription
category_patternstring (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_milesfloatautoSearch radius in miles (0.1–100). If omitted, a smart default is chosen based on the category (see table below). Max: 100 miles.
limitinteger200Max 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 keywordsDefault radius
auto, dealer, vehicle, car, truck25 miles
hotel, lodging, motel15 miles
home improvement, hardware, furniture, appliance10 miles
gym, fitness, sport8 miles
restaurant, dining5 miles
grocery, pharmacy, cafe3 miles
gas, fuel2 miles
(all others)5 miles

Response Fields

FieldTypeDescription
segment_md5stringLocation identifier for the competitor.
name / brand / categorystring|nullCompetitor name, brand, and category.
distance_milesfloatStraight-line distance from the anchor location in miles. Results are sorted by this field ascending.
lat / lonfloat|nullCompetitor coordinates.
address / city / statestring|nullStreet address of the competitor.
dma_namestring|nullDMA name from the location library.
visits_30dinteger|nullPanel visits to this competitor in the last 30 days.
household_count_60dintegerUnique households observed at this competitor in the last 60 days.

Wildcard Examples

category_patternMatches
restaurantAny 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

CodeMeaning
401Missing or invalid Bearer token
403Token valid but lacks permission for this operation
404Household or segment not found in Quorum's identity graph
429Rate limit exceeded. Default: 60 requests/minute per token.
500Snowflake query error — contact api@quorum.live

Data Freshness

Data TypeFreshness
Segment visit dataUpdated daily. Rolling 30-day counts have a ~5-day lag.
CTV/OTT impressionsNear real-time (pipeline dependent)
Household identity graphUpdated on Quorum's enrichment schedule
Geographic crosswalkStatic — updated quarterly