Quick overview
This workflow runs every weekday morning to check new HubSpot contacts with Precleared for GDPR/PECR-style cold email compliance, then writes the verdict, rule/source, next steps, footer requirements, and receipt back to HubSpot, optionally setting a legal basis, adding allowed contacts to a list, and creating follow-up tasks.
How it works
- Runs every weekday at 8am on a schedule trigger.
- Searches HubSpot for the newest contacts that have an email address and do not yet have a “Precleared checked at” value, up to the configured per-run limit.
- Builds a Precleared check request for each contact using sender country, recipient country (or fallback), lifecycle stage, unsubscribe status, and address source (including HubSpot form submissions).
- Sends each contact to the Precleared API (one request per second) and interprets the response as a compliance verdict with supporting rule/source text, next-step guidance, footer text, and a signed receipt link.
- Updates the HubSpot contact with the Precleared fields and routes outcomes so out-of-quota or failed checks are left unchanged for the next run.
- For contacts marked “ok_to_email”, optionally sets the HubSpot legal basis and adds the contact to a specified HubSpot list, and for non-allowed verdicts optionally creates a HubSpot task for the contact owner.
- Generates a run summary and can optionally post it to a Slack channel.
Setup
- Create a HubSpot private app (or token) with permissions to read and write contacts (and list access if you use the list step) and add it in n8n as a HubSpot App Token credential.
- Run the manual “Run once to set up HubSpot” path to create the Precleared property group and contact properties in HubSpot.
- Get a Precleared API key and configure the HTTP Header Auth on the Precleared request with
Authorization: Bearer <your_key>.
- Update the “Your settings” values (sender country, default/fallback country, max checks per run, optional
legal_basis, optional list_id, and task settings) before activating.
- (Optional) Enable the Slack node and connect Slack credentials, then set the target channel for posting the daily summary.