Airtable bases collect addresses from forms, imports and interfaces, and a verdict column next to the email column is the simplest way to keep them honest. There are three ways to fill it: a Zap or Make scenario that reacts to new records, an Airtable automation that runs a short script, and a bulk run for the rows already there. All three write the same fields.
Prepare the table
- Add three fields: a single select or text field named Verdict, a text field named Reason, and a number field named Risk score. A fourth text field for the suggested correction is worth having.
- Create a view that shows records whose Verdict is empty; the flows below use it as their trigger and their to-do list.
- Create a secret API key on the API keys page of your Spaw dashboard.
Verify new records through Zapier or Make
- Start the flow with the Airtable trigger for a new record in the view from step 2.
- Add the verification step: a Webhooks by Zapier POST or a Make HTTP request to
https://spaw.co/api/v1/emailwith the headerAuthorization: Bearer sk_live_…and this body, mapping the record's email field:
{
"email": "[email protected]"
}
The Zapier page and the Make page show the step in full. When the Spaw apps for those platforms are listed, it becomes a Verify Email action with a saved connection.
- Add the Airtable action that updates a record, match on the record id from the trigger, and map
data.deliverable,data.reason,data.risk_scoreanddata.did_you_meaninto the four fields. Filling Verdict removes the record from the view, so it is not processed twice.
Verify inside an Airtable automation
Airtable automations can run a script with network access, which removes the need for a third tool. Create an automation triggered when a record enters the empty-Verdict view, add a script action, pass the record id and email as input variables, and use this script:
const { recordId, email } = input.config();
const table = base.getTable('Leads');
const response = await fetch('https://spaw.co/api/v1/email', {
method: 'POST',
headers: { 'Authorization': 'Bearer sk_live_…', 'Content-Type': 'application/json' },
body: JSON.stringify({ email }),
});
const result = await response.json();
if (result.success === false) {
throw new Error(`Spaw: ${result.error.code} ${result.error.message}`);
}
await table.updateRecordAsync(recordId, {
'Verdict': result.data.deliverable,
'Reason': result.data.reason ?? '',
'Risk score': result.data.risk_score,
'Suggestion': result.data.did_you_mean ?? '',
});
The key sits in the script, so anyone who can edit the automation can read it; give the base its own key and revoke it from the API keys page if the base is shared widely. Test with [email protected], a free test address that answers a fixed result and is never logged.
Clean a whole table
Export the table to CSV, run the email column through a bulk verification on the Spaw dashboard or with the bulk endpoint, and import the result back with the verdict columns mapped to the four fields, matching on the primary field. The result keeps your original columns. For a spreadsheet rather than a base, the Google Sheets page offers a custom function instead.
What to do with the verdict
Filter views on Verdict. deliverable records are ready for outreach. risky records need the Reason: catch_all means an unconfirmed mailbox on a domain that accepts everything, role means a shared inbox, disposable means a throwaway address. undeliverable records should be kept out of sends, and a filled Suggestion field is usually a person worth one correction.
Cost
Each record that answers deliverable or risky spends 1 credit; undeliverable answers and repeats within seven days are free. Zapier and Make bill their own tasks; Airtable automation runs count against your Airtable plan. Bulk runs bill per processed row and verify duplicates once.