Quick overview
This workflow serves a 1x1 tracking pixel via an n8n webhook, classifies each request to detect real opens versus privacy proxies or scanners, and records open activity in Airtable with confidence and source metadata.
How it works
- Receives a GET request for the tracking pixel via a webhook endpoint with query parameters like the Airtable lead record ID and the email send timestamp.
- Immediately returns a 1x1 transparent GIF response with no-cache headers so the email client does not wait for any downstream processing.
- Classifies the request using user agent, IP headers, and time-since-send to label the source (for example Gmail/Yahoo image proxies, native clients, Apple MPP/privacy proxies, or security scanners) and assign a confidence level.
- For real opens with a lead ID, fetches the lead from Airtable and then searches the Airtable “Email Opens” table for an existing row for that lead.
- Updates the existing Airtable open record by incrementing the open count and refreshing the last-opened and classification fields, or creates a new Airtable open record for first-time opens.
- For noise traffic, drops obvious scanners/bots and logs privacy-proxy “blind” hits in Airtable with Count = 0 only when no existing open record exists for that lead.
Setup
- Create an Airtable personal access token credential with permission to read/write records and select it in all Airtable steps.
- Update the Airtable base and table selections to point to your own Leads table and Email Opens table.
- Create the Email Opens table with fields for Lead ID, Company Name, Last Opened At, Count, Confidence, Source, User Agent, IP Address, and minutes_since_send, matching the single-select values used by the workflow.
- Embed the pixel URL in your HTML emails and pass the lead record ID and send time (Unix seconds) as query parameters, using your n8n webhook URL (for example
/webhook/px?lead=recXXXX&t=1700000000).