PrecisionSearch
Advisor CRM
PrecisionSearch
Check Your Email

A sign-in link was sent to

Click the link in the email to complete sign-in. It will open in a new tab — you can close this one.

PrecisionSearch
Welcome — Set Your Password

Setting up

PrecisionSearch
⚠ Supabase disconnected — changes are saving to your browser only and may be lost.
Candidates
Sorted by priority ↑
Select a contact to view outreach history

Candidate Pipeline

Drag cards between stages
🤖 Collect JD with AI
Simple job pages fill instantly. Some job boards and LinkedIn (JS-rendered, login-walled) get queued — tell Claude "run the AI task queue" and it'll open the page in your Chrome session and pull the JD.
Select a job to view details
Select a company
Select a partner
Name Type State Title Company Stage Touches Last Activity Added Actions
Partner Network
Coming soon.
Marketplace
Coming soon.
Off Platform
Coming soon.
Select a record to work it
Grade candidates against job requirements using the A+ – F scale
Active Jobs
Select a job to grade candidates
Candidates
Select a candidate to see how they grade against active jobs
Jobs
Select a job to rank candidates by keyword match
AND · OR · NOT · "exact phrase" · ( grouping ) — adjacent words are AND by default. Known aliases (SDR/BDR, AE, CRO, GTM, SaaS…) expand automatically.
Candidates
◀
Select a candidate to see their keyword grade against every active job

Groups

Where every raw candidate, client and job prospect is viewed and filtered, and where groups are built from them for enrolment into campaigns.

Not built yet (#853). This one is not UI-only: there is no prospects table today, and nothing currently records when someone entered the prospecting pipeline or which list-building run produced them. Those need a real data model before this screen is worth building on top of it.

Loading…

Loading…

Campaigns

Where you build and edit outreach campaigns — the canvas, the step inspector, and the draft → validate → active publish flow.

The engine underneath is already built and running: per-step gates, do-not-contact, daily and weekly send caps, the schedule window, and the rule that stops a campaign the moment someone replies. What is missing is this screen. Until it exists, a campaign can only be authored by hand in SQL. Canvas rendering is S7.9.2, the step inspector S7.9.4, publishing S7.9.6.

Jobs

Loading…

Templates

Reusable campaign starting points. Save any campaign as a template, then create a new campaign from one whenever you need the same shape again.

Loading…

Responses

Replies across every channel in one place, in the shape of the existing Inbox. Built in S7.8.2; it lives here as a peer tab rather than as a separate screen nobody finds.

Today

Actions due today

Loading…
📞 Make Calls
📞 Softphone
📱
Set up in-browser calling
Enter your RingCentral Embeddable Client ID to enable browser calling — no desktop app needed.
How to get your Client ID ↗
📋
Select a group to load your call queue
Contacts in the group will appear here in priority order
Call Queue
—
📞 Phone Numbers
Last Activity
—
Call Outcome
Notes from this call
Tasks
Contact:
Status:
Loading…
💬
Select a conversation
Choose a thread from the left to view messages
–

Outbound Activity

Inbound Activity

Outcomes

Candidate Pipeline

Candidate Conversion Funnel

Outbound Breakdown

Pipeline Stage Breakdown

Book of Business Conversion

Delete Folder

Loading…
Contacts in the Delete folder are permanently deleted after 30 days. Purge runs every Sunday at 3am UTC.

Grade Candidate —

Comp marker

Add Contact

Log Activity —

⚠ Daily limit reached for this activity type
Outcome: change

Select Outcome

Account Settings

Choose how the CRM looks. Auto switches automatically based on the time of day (dark 7pm–7am on this device).

LinkedIn recommends staying well under these to avoid restrictions. Limits reset at midnight.

All automated sending is stopped.
Campaigns stay exactly where they are. Nothing is paused or cancelled — sending simply does not happen until you switch this back on.

Stops every automated send across the whole account — LinkedIn and email, all campaigns at once. It does not block you sending something by hand from Engage, or dialling and texting a prospect yourself; this switch stops the machine acting on its own, not you.

Enforced in the database, at the point every automated send has to pass through — so it holds even if a page is left open, a scheduled run fires, or something calls the system directly. Turning it back off resumes exactly where things were: nothing is paused, so there is nothing to un-pause.

Records how each of your LinkedIn posts is performing — views, reactions, comments and reposts — once a day, so performance can be trended over time (feeds the content graph). It runs on the server: your computer does not need to be on.

A small daily variation means the pull does not happen at the same instant every day. Pick an hour when your other LinkedIn automation is not running — early morning works well, since connection campaigns run later in the day.

Save

Reusable message copy for LinkedIn connection notes, LinkedIn messages, InMail, email, and SMS. Select one when authoring any campaign module that sends a message. LinkedIn message and InMail templates can also carry one file attachment or recorded video, sent every time the template is used. (LinkedIn connection requests cannot carry a file or video -- their API accepts a text note only.)

No attachment.

Loading…

Connect enrichment APIs to automatically find emails and direct phone numbers. API keys are stored locally in your browser only.

📧 Outlook / Microsoft 365
Checking…

When connected, email history syncs automatically every 10 minutes and on app open.

Controls what is actually pulled into the CRM, not just what is displayed — anything outside this scope is never fetched and never stored, so it survives a full Re-sync All. Sent is always included: your replies live only in Sent, so without it every conversation would show just the other person's side. Deleted Items, Junk, Drafts, Outbox and Conversation History are never synced in any mode.

Available when the setting above is Inbox + Sent + Select Folders. Only ticked folders are pulled in — unticked ones are never fetched and never stored. Folders created in Outlook later start off, so a new folder never quietly starts filling the CRM. Messages already synced from a folder you untick stay where they are.

Off by default. When on, deletes messages older than the chosen age only from auto-created unknown senders — never from a candidate or client, and never from a conversation you replied to. Removal is permanent in the CRM, but your Outlook mailbox is never touched, so the original mail always remains there. Runs after a sync while the CRM is open, and reports what it removed.

📅 Microsoft Calendar
Checking…

Read-only for now — connecting proves access, nothing is synced into the CRM yet.

☁ Supabase Sync
● Connected — syncing in real-time

All changes sync to Supabase automatically. Connection is always on.


📁 Local Backup (optional)

Optionally mirror data to a local folder or Google Drive Desktop as a secondary backup.

No folder connected

Connect Claude AI to auto-parse job descriptions from pasted text or any URL. Your API key is stored locally in your browser only. Get a free key at console.anthropic.com.

Maintenance

#342, 2026-08-09 -- every keyword grade computed before today predates #337/#340/#343's scoring fixes (numeric-requirement arithmetic, unclassified-requirement handling, over-qualified counted as met). One-time re-run against the current logic, no AI cost -- keyword grading is free.

#345, 2026-08-09 -- read-only check of how many call-transcript rows have parseable per-turn speaker labels (feeding AI grading's attribution tags) vs. don't, by name, so a growing unattributed count is never silent.

#347, 2026-08-09 -- read-only check of how many candidate titles resolve to a seniority rank vs. don't, aggregated by frequency, so _CF_SENIORITY can be extended against real, observed gaps instead of guessed at.

📞
RingCentral Integration
Sync call logs, SMS, and recordings to contact timelines.
Not Connected

Click below to authorize with your RingCentral account. You'll be redirected to RingCentral's login page and returned here automatically.

🟢 Connected — calls and SMS route to contacts automatically.

Off by default. When on, deletes calls and SMS older than the chosen age only from auto-created unknown numbers — never from a candidate or client, and never from a conversation you replied to. Removal is permanent in the CRM, but your RingCentral history is never touched. Runs after a sync while the CRM is open, and reports what it removed.

📱 In-Browser Softphone (RC Embeddable)
Enter your Browser-Based App Client ID to enable WebRTC calling directly in the CRM. Create one at developers.ringcentral.com ↗
🔗
Unipile Connection
LinkedIn and email channel status. Read-only — credentials are held server-side.
Checking…
Loading unprocessed events…
Loading weekly invitation budget…

The access token is stored as a Supabase Edge Function secret and is never sent to this browser. To rotate it, replace UNIPILE_API_KEY in Supabase → Edge Functions → Secrets on both projects.

🛡️
LinkedIn Inbound Review
People who messaged you on LinkedIn but are not in the CRM. Nothing here has been added to your contacts — that only happens when you choose it.
Loading…

Not junk adds the person to your contacts and brings their messages with them. Personal means a friend or family member — future messages from them are skipped silently and never queued again. Junk and Reviewed both clear the row without deleting anything, so this queue stays auditable. Block is the only one that is hard to undo, so it asks first.

A public link showing only de-identified, aggregated counts (no candidate/client names or any raw records) as charts -- safe to share with anyone, e.g. your recruiting coach. Nothing on this page requires login, and it never queries your live contact data directly -- it only reads the snapshot below, which refreshes itself automatically every 30 minutes while the CRM is open in a browser tab, or you can refresh it manually below anytime.

Never refreshed yet.

Auto-refreshes every 30 minutes while the CRM is open. Only stays current if someone has it open in a tab -- click the button above for an immediate update.

This link lives at a path on your existing CRM domain, not a separate subdomain -- a true subdomain (e.g. dashboard.goprecisionsearch.com) would need DNS + Netlify custom-domain setup done on your end first; this ships today without needing any of that, and a subdomain can be layered on top later if you still want one.

Passcode

Anyone with the link above needs this passcode to view the dashboard. Checking...

Add User

Enter an email address below and we'll send that person an invite to set up their own account. Only the exact address you enter can complete it — nobody else can sign up, even if they get hold of the link. Everyone on the team sees all contacts, jobs, companies, partners, and groups — role only controls who can invite new people and who can delete a record someone else added (you can always delete your own; admins can delete anyone's).

Current Users
Loading…

Profile

No photo
PNG/JPEG/WebP, up to 5MB. Shown only here for now.
Also used as the sender name on your outbound SMS.
Your login email. Changing this isn't wired up yet -- let us know if you need it.

⬆ Import Contacts from CSV

Required columns: name or first_name + last_name
Optional: classification (e.g. potential-candidate) or legacy type (candidate/client/partner/vendor), title, company, linkedin, email, phone, notes
First row must be column headers. Duplicates (same name + company) will be skipped.
Applied to every row that doesn't carry its own classification or type column. Intent is captured here, at the point of decision — it cannot be recovered afterwards.

Add Job

AI Import — Paste JD or URL ⚠ No API key — Add in Settings
You must be logged into the job platform in your browser for private listings to load.
Role Overview
Compensation & Benefits
Role Details
Why Join / Value Prop
Requirements
Ideal Candidate Profile
Sourcing Targets
Interview Process
Hiring Manager Insights
Full Job Description
Internal Notes

Enrich Contact

Tasks

Add Task

Add Company

Add Partner

Commission terms and the agency website live on the agency's Company record, not here.

Contact Detail

Job Detail

Call this number?

Mark Ineligible