Checking access...
← Back
ADMIN ONLY CAMPAIGN CRM

TLH Outreach Hub

A controlled admin workspace for agent prospect research, CSV imports, suppression controls, scheduled outreach campaigns and guarded email queue processing.

Compliance guardrail: unsubscribed, bounced and do-not-contact records are suppressed here and must not be emailed. Campaign queueing recomputes eligible recipients, sends in capped batches, includes an unsubscribe link in every email and records send outcomes.

0

Total contacts

0

With email

0

No email (call list)

0

Follow-ups due

Most common Email a county

Pick a county card — see who’s ready, then send Join the Beta in one flow.

Phone outreach Call lists by county

Open no-email prospects per county — call, log and update details.

Saved work Saved campaigns

Load a previous draft or check send stats — one campaign per county is clearest.

Advanced Campaign builder

Only if you need custom copy, tags or hand-picked agents.

Bulk entry Import CSV

Preview a spreadsheet import before saving new unsuppressed contacts.

Manual entry Add contact

Add one prospect manually, then save notes.

Email outreach

Email a county

One card per county. The big number is everyone with an email in that county. Ready-to-email and already-emailed are underneath, plus which campaigns were sent and when. Click the top of a card to send Join the Beta, or tap a past campaign to open it.

Saved campaigns

Campaigns

Stats on each card are for that whole campaign (everything ever sent under that name), not a live county filter. Prefer one campaign per county (e.g. “Join the Beta — Surrey”) so the numbers stay clear.

Checking delivery tracking...
Loading campaigns...
Manual entry

Add Contact

Add one prospect manually or update an existing contact. Select a row from the table to edit an existing record.

Create campaign

Campaign Builder

Pick a template, choose a county, then preview and send. Advanced options stay tucked away unless you need them.

Before queueing: confirm the lawful basis and that recipients are relevant. Suppressed contacts are always skipped; every send includes an unsubscribe link.
1. What to sendChoose a template (Join the Beta by default).
2. Who gets itPick a county — or use selected agents.
3. SendSave → Preview → Queue & send now.

1. What to send

Choose a template. Subject and copy fill in automatically — edit only if you need to.

Edit email copy

These fields generate the polished email preview and plain-text fallback. Use merge tags like {{contactName}}, {{agencyName}}, {{town}} or {{county}} where helpful.

2. Who gets it

Email everyone eligible in a county. Or open More options to pick specific agents instead.

Choose a county to see how many agents will receive this.
Using county filters. Tick contacts in the table below only if you want a hand-picked list.

3. Send

Save, confirm the count, then queue & send.

Path: Pick template → county → Preview → Queue & send now.

More options

Optional Image or Document Asset

Images appear near the top of the email. Documents are shown as a neat button link.

Advanced email code
Only edit this if you need custom HTML. The simple fields above will regenerate it.
Plain text fallback
The send function appends a compliant unsubscribe line automatically.

Email Preview

Bulk entry

Import Agent Prospects

Upload a CSV with headers. Common columns are mapped automatically: email, agency/company, contact/name, phone, website, town and county. By default existing emails are skipped; enable overwrite to update matching contacts with the latest scraped fields (suppression flags are preserved).

Phone outreach

Call lists by county

These are prospects with no email address — mostly Rightmove phone-only imports. Pick a county to open its call list below. Use the agency website (about/contact pages) to find emails, or Call for phone outreach. After contact, Edit or Log call to update details.

Loading call lists...

Email found — ready to invite

Phone-only prospects that now have an email. Use Email a county above for the main mail-out, or open a list here to review.

Loading enriched lists...
Recipients

Contacts

Find and edit prospects. To email a whole county, use the Campaign Builder above. To hand-pick agents: tick rows here, then Email these selected agents.

Bounced and suppressed emails are auto-deleted from the contact list when Resend reports them, and kept on a blocklist so CSV import cannot re-add them.

No contacts selected for campaign.
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

Do not email suppressed contacts. Records marked unsubscribed, bounced or do-not-contact are skipped during CSV import and flagged in the table.

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.

Included in this MVP: - Bulk queue-to-eligible campaigns - Resend API delivery in capped batches - Scheduled sendAfter/dueAt support - Unsubscribe endpoint with stored per-contact token - First-party click tracking for campaign links and assets - Provider webhook endpoint for bounce/complaint/unsubscribe events External setup still required: configure the Resend webhook URL, validate webhook signing/token strategy, authenticate the sending domain and start with a small test segment.