Schema
Every signal in the Autobound Signal Database follows a normalized schema. This structure applies across all 29 signal sources (SEC filings, news, hiring data, social media, and more), enabling consistent parsing and entity matching.
Quick Navigation
- Match signals to your contact/company database → Resolution (join on
domain,linkedin_url)- Download data from GCS → Delivery (timestamped folders, JSONL/Parquet)
- Browse all signal types → Signal Catalog
Base Schema
All signals share this structure:
{
"signal_id": "7dfdb4b4-c0b4-4620-aca6-e7263123028e",
"batch_id": "2025-11-14-09-30-00",
"signal_type": "job-change",
"signal_subtype": "jobChange",
"detected_at": "2025-11-14T00:00:00Z",
"association": "contact",
"contact": { // use email or LinkedIn url to match. Only shown for contact signals.
"first_name": "Lashawna",
"last_name": "Bean",
"name": "Lashawna Bean",
"email": "[email protected]",
"job_title": "Director Of People & Public Affairs",
"linkedin_url": "https://www.linkedin.com/in/lashawna-bean",
},
"company": { // use domain or LinkedIn url to match. Shown for both contact & company signals.
"name": "Harlem Stage",
"domain": "harlemstage.org",
"linkedin_url": "https://www.linkedin.com/company/harlem-stage",
"industries": ["Performing Arts"],
"employee_count_low": 11,
"employee_count_high": 50,
"description": "Harlem Stage ignites the artistic freedom of performing artists..."
},
"data": { // this is the signal-specific data. Different schema for each signal type.
"summary": "Joined Harlem Stage as Director of People & Public Affairs 2 months ago.",
"job_change_occurred": true,
"promotion_occurred": false,
"months_since_job_change": 2
}
}Note: The
associationfield indicates whether this is a"contact"or"company"level signal. For company-level signals, thecontactfield will be null or omitted.
Two Types of Signals
| Type | Match By | Examples |
|---|---|---|
| Company signals | company.domain or company.linkedin_url | 10-K, Reddit, News, Hiring Velocity |
| Contact signals | contact.email or contact.linkedin_url | LinkedIn Posts, Job Change, Work Milestone |
The association field tells you which type: "company" or "contact".
→ Full matching guide with SQL examples: Resolution
Field Definitions
Core Signal Fields
| Field | Type | Required | Description |
|---|---|---|---|
signal_id | string (UUID) | ✓ | Globally unique identifier for this signal instance. Use this as your primary key and for deduplication - no two signals will ever share the same signal_id. |
batch_id | string | Processing batch identifier (e.g., 2025-11-14-09-30-00). Signals in the same batch were processed together. Useful for tracking data lineage. Only exists for some signal types where multiple signals are extracted from the same document, like 10k. | |
signal_type | string | ✓ | The broad category of signal (e.g., 10k, contact-linkedin-post, hiring-velocity, job-change). Each signal_type is delivered to it's own bucket for most customers. |
signal_subtype | string | ✓ | The most important field for filtering. Specifies exactly what was detected (e.g., ceoChange, acquisitionAnnounced, aiInvestment). A single signal_type can have dozens of subtypes - this is how you target specific business events. |
association | string | ✓ | Whether this signal is about a "contact" (person) or "company". Determines which entity object contains the primary data. |
detected_at | string (ISO 8601) | ✓ | When Autobound detected this signal. For event-based signals (news, SEC filings), the actual event may have occurred earlier - check signal-specific date fields in the data object. |
Why signal_subtype Matters
signal_subtype MattersThe signal_subtype field is how you filter for actionable intelligence. For example:
| signal_type | signal_subtype | What it means |
|---|---|---|
10k | ceoChange | CEO transition disclosed in annual filing |
10k | aiInvestment | AI/ML investment mentioned in annual filing |
10k | acquisitionAnnounced | M&A activity disclosed |
news | funding | Company raised funding |
news | hires | Executive hire announced |
hiring-velocity | hiringVelocity | Overall hiring pace snapshot |
hiring-trends | hiringEngineeringRoles | Engineering department hiring activity |
Each signal source has its own set of subtypes. See the Signal Catalog for the complete list.
Contact Object
Contact information for the person associated with this signal. Present for contact-level signals (association: "contact"), null or omitted for company-level signals.
| Field | Type | Suggested Matching Key | Description |
|---|---|---|---|
first_name | string | First name | |
last_name | string | Last name | |
name | string | Full display name | |
email | string | Yes ✅ | Professional email address. Primary matching key - use this to join contact signals to your CRM or database. |
job_title | string | Current job title at time of signal detection | |
linkedin_url | string | Yes ✅ | Full LinkedIn profile URL, e.g. https://www.linkedin.com/in/lashawna-bean. Secondary matching key - use when email is unavailable or for additional validation. |
Company Object
Firmographic data for the company associated with this signal. Present on all signals (both contact and company level).
| Field | Type | Suggested Matching Key | Description |
|---|---|---|---|
name | string | Company display name | |
domain | string | Yes ✅ | Primary website domain (e.g., harlemstage.org). Primary matching key - use this to join company signals to your database. Normalized without www. prefix. |
linkedin_url | string | Yes ✅ | Full LinkedIn company page URL, e.g. https://www.linkedin.com/company/harlem-stage. Secondary matching key - use when domain matching fails or for additional validation. |
industries | array[string] or string | Industry classification(s). May be a single string or array depending on signal source. | |
employee_count_low | integer | Lower bound of employee count range | |
employee_count_high | integer | Upper bound of employee count range. When low equals high, this is an exact count. | |
description | string | Company description |
→ SQL examples and join logic: Resolution
The data Object: What Makes Each Signal Unique
data Object: What Makes Each Signal UniqueThe fields above (signal_id, company, contact) are consistent across all signals. The data object is where each signal type has its unique payload - the actual intelligence detected.
Fields vary by signal_type, but these common fields appear across most signals:
| Field | Type | Required | Description |
|---|---|---|---|
summary | string | ✓ | One-line summary of what was detected. Human-readable, suitable for display in UIs or email subject lines. |
detail | string | Longer explanation of why this signal matters and what action it suggests. 2-3 sentences typically. | |
relevance | float | Business relevance score from 0.0 to 1.0. Higher = more likely to indicate buying intent or sales opportunity. | |
confidence | string | How confident we are in the signal accuracy: high, medium, or low. Filter to high for automated workflows. | |
sentiment | string | Overall sentiment: positive, neutral, or negative. Useful for prioritizing outreach tone. | |
source_url | string | Link to the original source (SEC filing, news article, etc.). Use for verification or to include in outreach. | |
competitors_mentioned | array[string] | Competitor companies mentioned in the source. Useful for competitive displacement plays. | |
technologies_mentioned | array[string] | Technologies, products, or platforms mentioned. Useful for tech stack targeting. |
Signal-specific fields vary by type:
→ All signal schemas: Signal Catalog
Podcast
Podcast intelligence ships as two signal types that share one data vocabulary. Both follow the standard envelope above - only the data payload differs.
| signal_type | association | Match By |
|---|---|---|
podcast-contact | "contact" | contact.email or contact.linkedin_url |
podcast-company | "company" | company.domain or company.linkedin_url |
The data payload takes one of three shapes, determined by signal_subtype:
| Family | signal_subtype | What it is |
|---|---|---|
| Appearance | podcastAppearance (contact), companyPodcastAppearance (company) | One row per entity per episode: who appeared, talking points, a company snapshot |
| Claim | 65+ subtypes shared with the SEC/earnings vocabulary: aiInvestment, techAdoption, painPointDisclosed, strategicInitiative, marketExpansion, careerHistory, fundingEvent, executiveOpinion, industryPrediction, ... | One row per distinct on-air business claim, backed by verbatim transcript quotes |
| Sponsorship | podcastSponsorship | One row per sponsor ad read, with the verbatim offer text |
A single episode typically yields one appearance row plus several claim rows - join them on episode_id.
Episode Fields (all podcast rows)
Every podcast row carries the episode context, regardless of family:
| Field | Type | Required | Description |
|---|---|---|---|
podcast_name | string | ✓ | Show name |
episode_title | string | ✓ | Episode title |
episode_url | string | Link to the episode — null when no canonical URL was resolvable | |
episode_id | string | Stable episode identifier. Join key across all rows extracted from the same episode; occasionally null on sponsorship rows | |
published_at | string (date) | ✓ | Episode publication date |
headline | string | ✓ | One-line summary of the row, suitable for display |
Appearance Fields
podcastAppearance / companyPodcastAppearance add:
| Field | Type | Required | Description |
|---|---|---|---|
host | string | Show host | |
occasion | string | Why the guest was on (product launch, book, event, series) | |
co_guests | array[string] | Other guests on the episode | |
topics | array[string] | ✓ | Topics discussed |
talking_points | array[object] | ✓ | What the entity said, as {point, quote} pairs - point is the paraphrase, quote is verbatim from the transcript |
company_snapshot | object | ✓ | The company as described in the episode: what_they_do, org_facts[], technologies_used[], customers_mentioned[], competitors_mentioned[] |
transcript_source | string | ✓ | Always "transcript" - extraction ran on the full episode transcript, not show notes |
recorded_at_estimate | string (date or year-month) | ✓ | Estimated recording date, e.g. "2026-07" (episodes are often published weeks — or for reruns, years — after recording) |
date_confidence | string | ✓ | "exact" or "inferred" — confidence in the recording-date estimate |
is_ad | boolean | ✓ | true only for house ads (the show promoting its own product); regular rows are false |
Claim Fields
The 65+ claim subtypes add:
| Field | Type | Required | Description |
|---|---|---|---|
quotes | array[string] | ✓ | Verbatim transcript quotes supporting the claim |
evidence | string | ✓ | Convenience copy of the first quote |
speaker | string | ✓ | Who said it |
speaker_relation | string | ✓ | own_company (speaker talking about their own company) or third_party (someone else talking about the entity) |
timing | string | ✓ | When the claim applies, as stated in the episode |
event_date | string (date) | Present when a concrete date is stated for the event |
Sponsorship Fields
podcastSponsorship adds:
| Field | Type | Required | Description |
|---|---|---|---|
offer_texts | array[string] | ✓ | Verbatim ad reads - includes promo codes, offer terms, landing pages |
is_ad | boolean | ✓ | true only for house ads (the show promoting its own product); third-party sponsor reads are false |
Example: Appearance Signal
{
"signal_id": "dca86039-9c23-54d3-b9c2-00eacdb38baf",
"signal_type": "podcast-contact",
"signal_subtype": "podcastAppearance",
"association": "contact",
"detected_at": "2026-08-24T10:25:28Z",
"contact": { "full_name": "Arundhati Bhattacharya", ... }, // standard contact object
"company": { "name": "Salesforce", "domain": "salesforce.com", ... }, // standard company object
"data": {
"podcast_name": "CII Podcasts",
"episode_title": "India@100: Powering the Future through Digital Acceleration ft Arundhati Bhattacharya",
"episode_url": "https://shows.acast.com/ciipodcasts/episodes/india100-powering-the-future-through-digital-acceleration-ft",
"episode_id": "55821260383",
"published_at": "2026-06-05",
"headline": "Arundhati Bhattacharya (President & CEO, Salesforce, South Asia @ Salesforce) on CII Podcasts",
"host": "Rajan Navani",
"topics": ["India's economic future", "Digital transformation", "AI adoption", "Cloud computing"],
"talking_points": [
{
"point": "India must become a creator of technology, not just a consumer.",
"quote": "I also want to see India not only as a consumer of technology, but actually as a creator of technology. India has long been a consumer and yet, you know, we are one of the most digitally empowered societies."
}
],
"company_snapshot": {
"what_they_do": null, // populated when the episode discusses the company itself;
"org_facts": [], // often sparse for interview-style appearances
"technologies_used": []
},
"transcript_source": "transcript",
"recorded_at_estimate": "2024-06",
"date_confidence": "inferred",
"is_ad": false
}
}Note:
detected_aton podcast rows is when the weekly batch published. Usepublished_atandrecorded_at_estimateindatafor episode timing. Both podcast types are keyword-searchable viacontent_filterson the search endpoints (keywordsclause only).
→ Full guide with subtype list, sponsorship examples, and transcript keyword search: Podcasts
Sample Files
Download example signals to explore the schema:
Note: Production data is delivered via GCS in timestamped folders. Each folder contains new signals since the last batch - not a full refresh. See Delivery for bucket access and refresh schedules.
Need custom samples or have questions? Contact [email protected].
Updated 2 days ago

