0
Total contacts
0
To contact
0
Follow-ups due
0
Suppressed
Build, preview, save and queue guarded outreach from one place.
Manual entry Add contactAdd one prospect manually, then save notes or select them for a campaign.
Bulk entry Import CSVPreview a spreadsheet import before saving new unsuppressed contacts.
Recipients Select contactsSelect contacts or use filters before queueing a campaign.
Add Contact
Add one prospect manually or update an existing contact. Select a row from the table to edit an existing record.
Campaign Builder
Build a simple outreach email from visible copy fields, add one optional asset, preview it, then save and queue to eligible contacts. Select contacts or use filters before queueing.
Edit Simple Copy Fields
These fields generate the polished email preview and plain-text fallback. Use merge tags like {{contactName}}, {{agencyName}}, {{town}} or {{county}} where helpful.
Optional Image or Document Asset
Images appear near the top of the email. Documents are shown as a neat button link. Uploaded files are served from tlhportal.co.uk for better deliverability, not raw Firebase Storage links.
Advanced email code
Plain text fallback
Email Preview
Import Agent Prospects
Upload a CSV with headers. Common columns are mapped automatically: email, agency/company, contact/name, phone, website, town and county. Existing or suppressed emails are not imported.
Contacts
Find, edit and select prospects for campaign targeting. Tick contacts here, then choose selected contacts in the Campaign Builder before queueing.
| Contact | Agency | Area | Status | Follow-up | Suppression | |
|---|---|---|---|---|---|---|
| Loading contacts... | ||||||
One-to-one Copy Template
Optional fallback for a manual one-to-one email. Use the campaign builder above for guarded sends, recipient suppression and automatic unsubscribe links.
Suppression Safeguards
Campaign sends are split into queue records and processed by a scheduled Firebase Function. Unsubscribe tokens are required before sending; bounced, unsubscribed and do-not-contact contacts are suppressed before queueing and again before send.