# Airtable Destination

> Source: https://docs.trailspark.ai/destinations-rules/airtable-destination

## Overview

The Airtable destination writes evaluation results to your Airtable Contacts and Companies tables. Trailspark maps scores, reasoning, and evaluation dates to fields you specify in your Airtable base, and optionally pushes buying-group coverage data when you enable that section.

## Prerequisites

- Airtable integration connected with table mapping configured
- Fields created in your Airtable Contacts table for Trailspark data
- **Admin** or **Owner** role in Trailspark

## Fields in Airtable

Create these fields on your **Contacts** table:

| Field Name (suggested) | Field Type | Purpose |
| - | - | - |
| Trailspark Score | Single line text (or Single select with hot/warm/cold options) | Evaluation score |
| Trailspark Evaluation Date | Date | When the evaluation occurred |
| Trailspark Reasoning | Long text | AI-generated evaluation reasoning |

For company propensity, create on your **Companies** table:

| Field Name (suggested) | Field Type | Purpose |
| - | - | - |
| Trailspark Propensity | Single line text (or Single select with high/medium/low options) | Account-level propensity rating |
| Trailspark ICP | Single line text | The ICP name the account was scored against |
| Trailspark Score status | Single line text (or Single select with current/retired/not\_evaluated options) | Whether the pushed score is current, retired, or the account is not evaluated |
| Trailspark AI Reasoning | **Long text** (see the warning below) | The plain-language explanation behind the account's propensity score |

To store the ICP or Score status on Contacts too, add matching fields to your Contacts table.

Buying-group fields are documented below — add them only if you plan to use that feature.

> [!TIP]
> You can use any field names you like -- you'll select them from a dropdown during configuration. The names above are suggestions for clarity.

## Configuration

Go to **Settings** > **CRM Integration** > **Destinations** tab.

### Destination Settings

- **Send Evaluations to Airtable** -- Toggle to enable/disable the destination
- **Airtable Integration** -- Select which connected Airtable instance to use (auto-selected if only one exists)
- **Create Records if Not Found** -- When enabled, creates new Contact records if no match exists. Filter by score level (Hot, Warm, Cold)

### Contact Field Mapping

Map three required fields to your Airtable Contacts table:

| UI Label | Description |
| - | - |
| **Score Field** | Where the evaluation score is stored (hot, warm, or cold) |
| **Evaluation Date Field** | Where the evaluation timestamp is stored |
| **Reasoning Field** | Where the AI reasoning is stored |
| **ICP** | Where the name of the ICP the record was scored against is stored (optional) |
| **Score status** | Where the account's score status (current, retired, or not evaluated) is stored (optional) |

Trailspark loads your Airtable field metadata automatically. Select fields from the dropdown. If a previously mapped field no longer exists in Airtable (e.g., it was renamed or deleted), the mapping resets to blank.

### Company Propensity Score

The propensity score card configures where account-level propensity (high/medium/low) is written:

- **Company Propensity Field** (primary) -- Written to the Companies table when a linked company exists
- **Contact Propensity Field** (fallback) -- Written to the Contacts table when no company is linked

Both fields are optional.

### ICP

The **ICP** card configures where the name of the ICP each account was scored against is written on the Companies table. It travels on the same account-level sync as the propensity score, so downstream automations can branch on *which* ICP produced a score. The field is optional. When an account was scored without a specific ICP, nothing is written.

### AI reasoning

The **AI reasoning** card configures where each account's plain-language explanation is written on the Companies table — the same narrative you see on the account in Trailspark and in Slack alerts. It travels on the same account-level sync as the propensity score and always describes that score, so the two can never disagree.

Map it when you want the "why" behind a score readable directly in your base — on the record, in a grid view, or in an interface. This is separate from the Contact-level **Reasoning Field**, which explains an individual person's score; map either, both, or neither.

> [!WARNING]
> Use a **Long text** field, not **Single line text**. Airtable updates a record in a single write, so a field too small to hold the explanation rejects **the whole update** — the propensity score and buying-group fields included, not just the reasoning.

The field is optional. When an account's evaluation has no explanation, nothing is written — your existing field value is left untouched rather than blanked. When an account's score is retired, the last explanation stays in place and **Score status** flips to `retired`.

### Score status

The **Score status** card configures where each account's score status is written on the Companies table (and, on the Contact mapping, on Contacts). It travels on the same sync as the propensity score and takes one of three values:

- **current** -- the pushed propensity score reflects the account's live standing.
- **retired** -- the account no longer matches the ICP it was scored against, so its last pushed score is stale and should no longer be trusted.
- **not\_evaluated** -- the account has no evaluation yet.

When an account leaves the ICP it was scored against, Trailspark promptly updates this field to **retired** in Airtable (for destinations that map it) — you don't have to wait for the account's next sync. Without the field, a retired account simply stops receiving score updates and its last pushed score silently goes stale, so an automation cannot tell a fresh score from a stale one. Map it to let automations suppress or flag scores that are no longer current. The field is optional; unmapped, nothing is written.

## Account Fields

The **Account Fields** card writes company data into fields you choose in your Airtable base. All fields are optional and only write when you map them. Unlike the Salesforce and HubSpot destinations, each row here also has its own **source** choice:

| UI Label | Written to | Source options |
| - | - | - |
| **Industry** | Companies | Best known (CRM + enrichment) / Enrichment data |
| **Employee Count** | Companies | Best known (CRM + enrichment) / Enrichment data |
| **Region** | Companies | Best known (CRM + enrichment) / Enrichment data |
| **Market Segment** | Companies | Best known (CRM + enrichment) / Enrichment data |
| **Website Domain** | Companies | Best known (CRM + enrichment) / Enrichment data |

- **Best known (CRM + enrichment)** (default) -- Trailspark's best-known value for the field: your connected CRM's own value when it has one, filled in with data from your connected enrichment providers when it doesn't. This is the same value shown on the account page.
- **Enrichment data** -- the raw value from your connected enrichment providers only (for example Clay or Reo.dev), regardless of what your CRM has for that field.

> [!TIP]
> Choose Enrichment data when you want to see your enrichment provider's answer on its own -- for example, mapping Industry to a separate `Clay Industry` field to compare against your CRM's value, rather than blending the two.

This writes on the same account-level sync that pushes propensity and buying-group coverage, for accounts linked to a record in your Companies table. A field is left blank if its chosen source has no value for that account; it is never filled from the other source.

### Custom enrichment fields

If your enrichment provider sends fields beyond the standard five and you've turned them on under **Enriched fields** (see [Enrichment Rules & Budget Caps](https://docs.trailspark.ai/data-enrichment/enrichment-rules-and-budget-caps)), each active field gets its own extra row on this card, using the label you gave it. Map it to a field in your Companies table the same way as the standard fields -- custom fields are always sourced from enrichment data (there's no Best known / Enrichment data choice, since there's no CRM value to blend with). Turning a field off later doesn't remove an existing mapping -- the row is kept and marked **"No longer active,"** and it stops writing until the field is reactivated.

## Account Fit & Outside Activity Fields

Two more cards write Trailspark's newer account-level facets to your Companies table. Neither ever changes an account's propensity score — they're a separate read next to it. All four fields are optional and only write when you map them.

| UI Label | Written to | What it contains |
| - | - | - |
| **Account fit** | Companies | How well the account's profile matches your ICP: `strong`, `partial`, `weak`, or `unknown` |
| **Outside activity** | Companies | How recently third-party activity was seen on the account: `hot`, `warm`, `cold`, or `none` |
| **Last outside activity** | Companies | The date of the most recent outside-activity event |
| **Outside activity kinds** | Companies | A comma-separated list of what kind of outside activity was seen recently, e.g. "Raised funding, Hiring activity" |

Create **Last outside activity** as a **Date** field in Airtable. The other three are Single line text fields.

`unknown` and `none` are written on purpose — they mean Trailspark looked and didn't find enough to grade, which is different from the field being untouched because nothing is mapped. See [Account detail](https://docs.trailspark.ai/accounts-dashboard/account-detail) for what these values mean on the account page.

These fields update whenever the account's other evaluation fields do (a new score, a coverage change, or the account leaving its ICP) — a change in outside activity by itself, with nothing else about the account changing, doesn't trigger its own push. If you need the freshest possible read, re-score the account or wait for its next scheduled evaluation.

## Buying Group Fields

Enable the **Push buying-group fields** toggle to push coverage data alongside evaluation scores. All fields in this section are optional — they write only when you map them.

### Account properties

| UI Label | Written to | What it contains |
| - | - | - |
| **Buying-group stage** | Companies | Dormant, Forming, or Complete |
| **Engagement completeness (%)** | Companies | Share of required roles with an actively engaged person |
| **Known completeness (%)** | Companies | Share of required roles with any person assigned |
| **People still needed** | Companies | Count of additional people needed to complete the group |
| **Missing roles** | Companies | Role names not yet filled (semicolon-separated) |
| **Engaged roles** | Companies | Role names currently active (semicolon-separated) |
| **Propensity as-of date** | Companies | Date the propensity score was last evaluated |
| **At-risk status** | Companies | "At Risk" when high propensity meets stalled engagement; otherwise "Current" |
| **Renewal health** | Companies | Health signal for renewal-ICP accounts: Healthy, Cooling, Fading, Cold, or Pending |

For what these values mean, see [Account coverage](https://docs.trailspark.ai/buying-groups/account-coverage).

> [!NOTE]
> Airtable does not currently support a contact-level buying-group roles field. Use Salesforce or HubSpot if you need per-contact role data in your destination.

## How Record Matching Works

Trailspark matches records by email address:

1. Looks up the contact's email in your Airtable Contacts table
2. If found, updates the existing record with evaluation results
3. If not found and **Create Records** is enabled, creates a new Contact record
4. For propensity and buying-group fields, follows the Contact → Company linked record to find the associated company

> [!NOTE]
> The Contact → Company link field must be configured in your table mapping for company-level fields to work.

## Troubleshooting

| Issue | Resolution |
| - | - |
| Field not in dropdown | Verify the field exists on your Contacts or Companies table and that your table mapping is configured correctly |
| Data not writing | Check that the destination is enabled and the Airtable integration is still connected |
| Contact not found | Trailspark matches by email -- ensure the contact exists with a valid email in your Contacts table |
| Propensity not updating company | Verify the Contact → Company link field is configured in table mapping |
| Buying-group fields not writing | Confirm the "Push buying-group fields" toggle is on and the field is mapped |
| "No Airtable Integrations" message | Connect Airtable first from **Settings** > **CRM Integration** > **Connect** tab |

## Next Steps

- [Salesforce Destination](https://docs.trailspark.ai/destinations-rules/salesforce-destination)
- [HubSpot Destination](https://docs.trailspark.ai/destinations-rules/hubspot-destination)
- [Account coverage](https://docs.trailspark.ai/buying-groups/account-coverage) -- Understand the values being pushed
