ATS duplicate checker while sourcing on LinkedIn
The idea
In a recruitment agency, two recruiters messaging the same candidate about the same role looks amateurish, burns candidate goodwill, and starts commission arguments about who owns the record. The information exists in the ATS; nobody checks it while sourcing on LinkedIn because tabbing over to search each name kills the flow.
The wedge is putting the answer where the recruiter’s eyes already are: a badge on the LinkedIn profile itself saying this person is in your ATS, last touched in March, owned by Dan. Building against one well-documented mid-market ATS (Loxo) rather than all of them keeps this a one-week build and makes the integration deep instead of shallow.
Who pays
The buyer is the agency owner or ops lead at a 3-30 seat recruitment agency, at 25 USD per seat per month with a 3-seat minimum - agencies already stack small per-seat tools and this one prevents visible embarrassment in front of candidates and clients. Distribution: the Loxo customer community first (their marketplace and user groups), then recruiting ops communities and LinkedIn itself, where recruiters live.
MVP scope
- Loxo API sync of candidate records into a matchable index
- Content-script badge on LinkedIn profiles: known / probable / not in ATS
- Last-touched date, record owner, and click-through to the ATS record
- Fuzzy name-plus-company matching with LinkedIn URL exact matching on top
- Team dashboard for ATS connection, sync status, and seats
- Skip for v1: additional ATS integrations, in-extension note-taking, outreach features, search-results bulk overlays beyond the basic badge
Build AlreadyKnown, a Chrome extension that tells agency recruiters, while they browse LinkedIn, whether a candidate is already in their ATS. Stack: a Manifest V3 Chrome extension (content script + service worker), a Next.js API backend, Postgres via Prisma. Start with exactly one ATS integration - Loxo's API - rather than attempting broad coverage. Sync flow: an agency admin connects their Loxo account via API key from the web dashboard. The backend syncs candidate records on a schedule (name, current company, title, LinkedIn URL where present, last activity date, record owner) into Postgres with an agency_id, and stores normalised match keys. Browsing flow: the content script detects LinkedIn profile pages and people-search results, extracts name, current company, and the profile URL slug, and queries the API. Matching is tiered: exact LinkedIn URL match is definitive; otherwise fuzzy name plus company match (trigram similarity) returns a probable match. A badge overlays the profile header: green means not in ATS, amber means probable match, red means known - showing last-touched date and which colleague owns the record, with a click-through link to the ATS record. Privacy detail: send only hashed/normalised lookup keys from the extension; never scrape or store profile data beyond the match query. Pages (web app): connect ATS, sync status, team seat management, billing. Pricing: 25 USD per seat per month via Stripe, minimum 3 seats, 14-day trial.
// More B2B ideas
-
Compliant labels for cottage food producers
Home bakers and small food producers hand-make labels that violate state cottage food rules; this generates compliant labels with allergens per state.
B2B weekend -
Belt testing and curriculum tracker for martial arts schools
Martial arts school owners track student stripes and testing eligibility on index cards; this tracks progress, flags who is ready, and runs test day.
B2B 1 week -
Bait station scanning for pest control routes
Pest control techs hand-log rodent station checks that commercial clients audit; this scans station QR codes and builds the service report on site.
B2B Mobile 1 month -
Rent collection for salon booth renters
Salon owners chase booth rent in cash and texts; this auto-bills weekly rent, tracks renter insurance and license expiry, and flags late payers.
B2B 1 week