v16
Gmail disconnected
No leads loaded yet

Go to Leads and import your Zoho CSV to get started.

No leads loaded yet

Import your Zoho CSV to see your action queue.

No leads loaded
All Leads
Company City Status Primary Contact Phone Email Score
Active Clients
Company City Primary Contact Phone Email Score
Leads Map
Companies (leads) by city — one marker per city; the number is how many are there. Click a marker to see who. "Locate remaining" geocodes any city still missing a marker.
Candidates Map
Candidates by city — one marker per city; the number is the candidate count. Same geocoder + cache as leads.
Companies + Candidates
Companies  Candidates. A blue and a red dot close together = a candidate near a client (zoom in to judge distance). Faded dots are city-only (no street/ZIP) in a large metro — approximate. Click a dot for names.
Jobs / Open Positions
Client Position Status Salary Fee % Contract Value Candidate
Total contract value
← Back
Company Information
Contacts
Addresses
Main Address
Secondary Address
Summary & Location Notes
Record Activity
Created
Modified
Last Activity
Last Emailed
Upcoming Tasks

Pending scheduled actions and sequence steps for this lead. Complete or reschedule each as the work is done. Completed actions move to the Activity Log.

Emails

Recent Gmail threads with this lead's contacts. The Status column shows whether the recipient opened the email (requires the Email Open Tracking pixel from API Keys). Requires Gmail OAuth with gmail.readonly scope.

Click Refresh to load Gmail history.
Activity Log & Notes
Entries are read by Claude when rescoring this lead
Documents
Drop files here or click to browse
PDF, Word, Excel, CSV, JSON, images · Max 25MB per file
Schedule an Action

Schedule a call, text, email, task, or meeting. Appears in Upcoming Tasks, the Calendar, and the To-Dos queue.

Priority Score
--
Add notes and click Rescore for a Claude evaluation.
Outreach Sequence
Candidates
Candidate City Status Grade Phone Email
Candidate Pipeline
Drag a submission card between stages. Candidates with no job yet sit in New.
← Back
Contact
Addresses
Main Address
Secondary Address
Emails

Recent Gmail threads with this candidate's email addresses. Requires Gmail OAuth with gmail.readonly scope.

Click Refresh to load Gmail history.
Activity Log & Notes
Documents
Drop files here or click to browse
Résumé, PDF, Word, images · Max 25MB per file
Jobs Associated

Each submission carries its own pipeline stage. The client is the job's company.

Schedule an Action

Schedule a call, text, email, task, or meeting. Pending items show in Upcoming below.

Select Sample Leads

Notes and activity log from each lead's file are automatically included in the email prompt for personalization.

Generation Mode
Template to use
Auto picks E1 for cold/new, E4 for NRN, E5 for pipeline, E3 for warm/engaged, and so on.

Connect Gmail to enable sending

Send Queue
CompanyRecipientStatusSubjectActions
Sent Emails
CompanyEmailSubjectSent At
No leads loaded yet

Import leads to see what your CRM can automate today.

API Keys & Credentials

All credentials live in your browser session. Anthropic key is stored in sessionStorage and clears when you close the browser. Gmail token is held in memory only and clears on page refresh.

Claude (Anthropic)
MANAGED
Powers AI email generation and Claude scoring (leads + candidates). The API key now lives server-side in the Supabase Edge Function proxy — there's nothing to paste here, and no key is ever stored in your browser.
Google Account
UNKNOWN
One sign-in grants Gmail send + read, Calendar, and Drive access. Powers email sending, the lead-page Emails history, Reply Detection, Calendar push, and the Drive sync that the background worker shares. Tokens refresh automatically — no more pasting tokens every hour.

First sign-in shows a Google consent screen for the four scopes. After that the connection is restored silently on every load.

Worker Activity
FEED
Actions taken by the Apps Script background worker (scheduled sends, sequence advances, reply pauses) while the CRM was closed. Read-only. Refreshes every 5 minutes while this app is open.
Email Signature
UNKNOWN
Build your signature here just like in Mail. Use the toolbar to add formatting, links, and a photo or logo. The signature is appended to every email sent through the Send queue. Inline images are embedded as base64 — small images (under 200 KB) are best.
Tip: If your Gmail signature already contains an image hosted on Google's servers, paste the raw HTML into the source view. For local images (laptop, phone), use the Insert Image button.

Signature size: 0 KB

Google Voice (Texts)
MANUAL
Google Voice has no public API. Texts are sent manually through voice.google.com ↗. The CRM generates the message body for you — copy and paste from the lead page or the Send Text button.
Reply Detection & Sequence Pause
UNKNOWN
Polls Gmail every 10 minutes for replies from any lead email. When a reply is found, the lead's replied flag is set, the sequence pauses, and a note is logged. Requires the Gmail OAuth token above with the gmail.readonly scope. If you only authorized gmail.send, re-do the OAuth flow checking both scopes.
Status: Reply detection runs automatically whenever Gmail is connected. You can also trigger a manual check now.
Day-Based Scheduled Sending
UNKNOWN
Auto-sends queued emails whose Send On date is today or earlier. Works without a backend — runs in the browser while the app is open. Items in the Send queue can be assigned a Send On date via the Edit dialog or scheduled directly from a lead's Schedule an Action panel. Requires Gmail to be connected.
How to use: Schedule an email step on a lead, or set a Send On date when reviewing a generated email. When the time arrives and this app is open, the email goes out automatically and the sequence advances. Manual sends still work the same way.
Email Open Tracking
NOT SET
Embeds a 1×1 tracking pixel in every outbound email. When the recipient opens the email, the pixel hits your tracker endpoint, which marks opened=true on the matching lead and re-runs scoring. Requires a hosted endpoint URL — any service that returns a 1×1 image and POSTs the lead id back to a webhook will work.
Endpoint requirements: A URL like https://your-tracker.example.com/pixel?lead=<id>&msg=<hash> that (a) returns a 1×1 transparent gif, (b) logs the hit somewhere readable, and (c) lets you fetch open events. Without one, embed only — opens won't be recorded.
Polls your endpoint's /opens?since=<timestamp> route if available.
Email Style
PLAIN
Wraps your outbound copy in a branded HTML layout at send time. Your AI-written copy is never changed — this is presentation only. Plain sends exactly as before. PrimeFactor Branded adds a lightly-branded, deliverability-safe shell (small wordmark, accent rule, unsubscribe link + header). Cold-safe by design — research and the 20 candidate designs live in dev/html-emails/.
Header logo (optional): a hosted https image URL. Leave blank to use a styled text wordmark — no image dependency, best deliverability.
Backup & Restore Data
LOCAL ONLY
Export every byte of CRM state — leads, contacts, notes, scheduled actions, templates, signature, and exclusion list — to a single JSON file. Restore the file to roll back to a previous state or move the CRM to a new browser. Run a backup before any upgrade. PDFs (in IndexedDB) survive HTML upgrades automatically but are exported separately by the Export Documents button.
Where files go: Downloads via your browser. Save them somewhere you'll find later — Google Drive, Desktop, an external drive. There is no cloud sync.
Records which PDFs are attached to which leads (the PDFs themselves live in IndexedDB and persist automatically).
Scans all leads + contacts for: empty names, fragment contacts (no name, just email/phone), duplicate company names, and outreach-readiness gaps. Downloads a report. No data is changed.
V18.7.0: groups leads with the same (normalized) company name or primary email, keeps the one with the most information, backfills its empty fields and moves all contacts/notes/documents/jobs over, then removes the duplicate. Preview + confirm before anything changes.
Month
Email Text Call Task

Shows the actions you've manually scheduled. Tick Show sequence steps to also overlay the auto-projected next-due step for every active outreach sequence. Click any item to open the lead.

Score Leads

Use the buttons below to populate priority scores across your lead set so the score-sort columns work everywhere. AI scoring uses the Anthropic API key from your API Keys tab and now runs up to 5 leads at once with automatic retry, so a full rescore is roughly 5x faster than before. Base scoring uses tier, replies, and opens only — no API needed.

AI Score Changed Leads only rescores leads that are new or have changed since their last score — ideal for a quick weekly run. The first time you use it, every lead counts as "changed" since none have a change record yet.

All Leads by Score
ScoreCompanyCityStatusTierReason
Email & Text Templates
View, edit, add, or delete templates. Changes save to your browser permanently.
Sequence Tracker
Each column is a sequence step. Leads automatically move forward when a step is marked done on their lead page.

Upload leads to see the sequence tracker.

Welcome back

Sign in to your PrimeFactor recruiting workspace.