How It Works

Not scraped. Not crowdsourced.
Called.

Every data point in Dialed comes from a real AI phone call placed to a real business. Here's exactly how the pipeline works — from scheduler to published data.


01

Step 1 of 4

Scheduler triggers call batches

A cron-based scheduler determines when each business category gets called. Gas stations run 3× daily at 6am, 12pm, and 6pm. Medical offices run once at 9am. Farmers markets run weekly. Every schedule is configurable per market and category.

The scheduler maintains a priority queue of all tracked businesses. It accounts for business hours, call-back windows, and category-specific cadences. Businesses that frequently go unanswered are deprioritized automatically.

// Scheduler config (simplified)
{
  "category": "gas_station",
  "city": "honolulu",
  "schedule": "0 6,12,18 * * *",
  "batch_size": 50,
  "timeout_seconds": 45,
  "retry_policy": {
    "max_attempts": 2,
    "backoff_minutes": 30
  }
}

02

Step 2 of 4

AI voice agent places the call

A conversational AI agent dials the business using a category-specific script. The agent handles hold music, IVR menus, and transfers. It extracts structured data points from the response — prices, wait times, availability slots — all in real time.

The voice agent uses a fine-tuned LLM backbone with a retrieval layer for local context. It can handle complex multi-turn conversations, clarify ambiguous answers, and gracefully exit when a business declines to share data.

// Call transcript (abbreviated)
{
  "call_id": "c_8f2a9b3c",
  "business": "Costco Honolulu",
  "duration_seconds": 23,
  "transcript": [
    {"role": "agent", "text": "Hi, I'm calling to check your current regular unleaded price for our price comparison service."},
    {"role": "staff", "text": "It's four twenty-nine a gallon."},
    {"role": "agent", "text": "Great, and premium?"},
    {"role": "staff", "text": "Four sixty-nine."}
  ],
  "extraction_status": "success"
}

03

Step 3 of 4

Extraction worker validates data

Every AI response is passed through an extraction pipeline that normalizes units, validates ranges, and flags anomalies. A price of $1.29/gal gets flagged. A wait time of 400 minutes gets held for review. Clean data only.

The validation layer uses a combination of rule-based checks and statistical models trained on historical data. Outliers are quarantined and routed to a review queue. Businesses with consistent extraction failures are escalated.

// Extraction result
{
  "call_id": "c_8f2a9b3c",
  "category": "gas_station",
  "extracted": {
    "regular": 4.29,
    "premium": 4.69,
    "diesel": null
  },
  "validation": {
    "passed": true,
    "flags": [],
    "anomaly_score": 0.02,
    "confidence": 0.97
  },
  "normalized_at": "2026-04-11T06:04:12Z"
}

04

Step 4 of 4

Data published instantly

Validated data is written to the database and immediately available via the REST API, consumer pages, and webhook subscribers. Historical records accumulate forever. Every data point is permanently timestamped to its call.

The pipeline from call completion to API availability averages 8 seconds. Webhook subscribers receive push notifications within 2 seconds of validation. All historical data is retained indefinitely — no rolling window.

// GET /v1/gas-prices?city=honolulu
{
  "business": "Costco Honolulu",
  "called_at": "2026-04-11T06:02Z",
  "payload": {
    "regular": 4.29,
    "premium": 4.69,
    "diesel": 4.89
  },
  "verified": true,
  "call_id": "c_8f2a9b3c",
  "history_available": true
}

// 94% accuracy · Updated 3× daily

Data Schema

What every record looks like.

All Dialed records share a common envelope. The payload varies by category.

idstring

Unique record identifier (uuid v4)

business_idstring

Stable business identifier across calls

categoryenum

gas_station | urgent_care | restaurant | …

citystring

ISO 3166-2 city slug (e.g. honolulu)

called_atISO 8601

Timestamp of call completion (UTC)

payloadobject

Category-specific extracted data points

verifiedboolean

Passed anomaly detection and validation

confidencefloat

Model confidence score (0–1)

call_idstring

Link to raw call record and transcript

Explore the API →See Live Data

Ready to Build?

Get structured data from every call.

Full REST API access with webhook push, 90-day history, and enterprise SLA.

Get API Access →View Pricing