Back
Sales & Marketing

Your sales team should never build a list again

A lead-intelligence platform that finds the companies worth talking to, the people inside them, and the moment they start buying. Your reps get a searchable database that you own outright.

August 17, 2026
Share
CAPABILITY CASE STUDY · PFACTORIAL

26,764 intelligence records · 19,976 people profiles · 4,865 companies · 9 collection pipelines
THE PROBLEM
Most of prospecting time isn’t prospecting
A rep’s day goes on hunting for a domain, guessing an email format, and working out who actually signs. The usual fix is a data subscription, which rents you a snapshot, caps your exports, and takes the records back the day you stop paying.

We built the alternative for ourselves first. The system discovers accounts from public business sources, extracts the people inside them, enriches those people with verified contact details, and then watches each account for the two signals that reliably come before a purchase: hiring activity and company news.

Everything lands in one governed database and shows up in a web application a non-technical salesperson can use on day one. No list building, no spreadsheet handovers, no per-seat licence attached to your own pipeline.
HOW IT WORKS
Three stages, and only the last one involves a human
01 Discover
Nine automated pipelines sweep public startup and agency directories, public job-board and applicant-tracking feeds, and organisational-chart sources. They pull companies, the people inside them, open roles and dated news.

02 Resolve and enrich
Every record is matched against the existing database before it is written, then gap-filled with verified email and phone data from licensed enrichment providers. Nothing already verified is overwritten.

03 Work the signals
Reps open a filtered view (by industry, size, seniority, contactability, hiring function or news recency) and see the account, its org chart, its open roles and its latest news on one screen.
Three stage pipeline diagram: discover, resolve and enrich, work the signals.
WHAT’S IN IT
Coverage as it stands today
Every figure below is measured directly against the live database. The pipelines that produced them are built to run repeatedly, so this is a starting position rather than a fixed delivery.

4,865 companies: name, website, industry, size, location, funding and source provenance.
5,982 contacts: named people with title, email, phone and LinkedIn, ranked by seniority.
13,994 org-chart people: reporting lines and departmental rosters inside target accounts.
795 job postings: open roles with function, seniority, location and posting date.
1,128 news items: dated company news linked back to the account it concerns.
26,764 records in total: individually addressable intelligence records.
Two kinds of people, and both matter
The platform holds 19,976 person records: 5,982 primary contacts carrying direct contact details, plus 13,994 org-chart people giving names, titles and reporting lines inside those same accounts. The first set is who you email. The second is how you read the room before you do: who the buyer reports to, who sits beside them, and who else has to be convinced.
THE APPLICATION
Eight screens, no training required
The whole database, presented as search and filters. Authenticated on every request, read-only against your commercial data, and usable from a link.
Dashboard: see coverage, enrichment completeness and how the database is growing.
UI dashboard image
Companies: work the full company database with faceted filters and saved segments.
companies list page
Company: one account end to end: profile, contacts, org chart, open roles, recent news.
company profile detail page
People: every contact across every account, filtered by seniority and contactability.
company people page
Org chart: read the reporting structure of an account before the first call.
organization chart page
Jobs: track hiring by function, seniority and recency, across eleven function buckets.
job detail page of companies
News: catch funding, launches and moves, linked back to the account.
news detail page of company
Lists: curated and rule-based segments, including an 82-account priority watchlist.
priority company list
Inspect without losing your place. Every list screen has a slide-out detail panel, so opening a company or a person never drops the filtered result set you spent time building.

Filters that survive messy data. Hiring functions are matched against both department and job title, so postings that arrive with no department field still land in the right bucket.

Fast on ordinary hardware. Server-rendered forms and single-pass aggregate counts, with no front-end framework to maintain. Filter panels stay responsive as the database grows.

Light and dark, correctly. One design-token stylesheet drives both themes, applied before first paint, with a default that still renders if the theme script never runs.
WHY THE DATA STAYS CLEAN
Aggregation is easy. Not corrupting the database is the hard part.
Pulling from many sources creates two failure modes that quietly destroy a CRM: duplicate records, and merged records that were never the same company. Both are handled structurally, not by periodic cleanup.

Company identity resolution
Every loader resolves a company through a strict cascade before it writes anything: website domain → the source’s own profile ID → name, scoped to that one source.

The rule that protects your database
Names are never matched across sources. Nineteen company names in this database exist under two or three different sources as genuinely different businesses, verified by comparing their websites. A naive name-based merge would silently destroy real companies and every contact attached to them.
Collection can’t corrupt the app. Collection and the application share no code: the database schema is the entire interface. A failed collection run cannot disturb the application, and an application change cannot disturb stored data.

Nothing is written unreviewed. Collectors produce a reviewable file; a separate loader pushes it, dry-run first, reporting exactly what it would insert, update and skip.

Gap-fill, never overwrite. An enrichment run can add a missing phone number. It cannot erase a verified email. Contact sets refresh atomically per company and per source.

Constraints in the database itself. Unique indexes on company website, posting URL and news link push duplicate prevention below the application, where it can’t be bypassed.
architecture
ACCESS & PRIVACY
Contact data is personal data, and it is treated that way
The application holds business contact details for roughly twenty thousand people. Authentication was built and verified before the application was made reachable, not bolted on afterwards.

Protected by default. Access control is default-deny: a new screen is protected the moment it’s added, so protection is never something a developer can forget to switch on.

Modern credential handling. Passwords stored with Argon2id, brute-force lockout held centrally, and identical responses on every failure so account holders can’t be enumerated.

Revocation that’s immediate. Disabling an account signs that person out on their next request, not whenever their session happens to expire. Accounts are deactivated, never deleted.

Read-only by design. Every query the application makes against commercial data is a read. The write path belongs to the loaders alone, with privilege separation enforced at the database.
THE COMMERCIAL CASE
Own the asset instead of renting a snapshot
Against a per-seat data subscription:

Ownership
Subscription: Records are withdrawn when you stop paying, and export caps apply.
This platform: The database you build — companies, org charts, roles and news — is yours outright, with no seat licence and no export cap. Enrichment-provider records follow that provider’s terms.

Fit
Subscription: You get whoever the vendor already has.
This platform: Sources, filters and enrichment logic are configured to who you actually target.

Cost shape
Subscription: Scales with headcount.
This platform: Fixed infrastructure plus optional enrichment credits.

Freshness
Subscription: A snapshot that decays from the day it’s bought.
This platform: Roles and news are re-checked every collection cycle.

Depth
Subscription: Contact records.
This platform: Contacts plus reporting structure, open roles and dated news per account.

The engine is built, documented and verified against live data, and every figure in this document is measured rather than projected. Because the pipelines are designed to run on a cadence, the coverage above should be read as a floor: it grows with every cycle rather than depreciating between them.
WORK WITH US
We can build this around your market
Same architecture, your target definition: the sources that matter in your sector, the segments your reps actually work, and the signals that mean someone is ready to buy. Tell us who you sell to and we’ll show you what the database would look like.

All figures measured against the live database, August 2026.
Volumes reflect the current collection phase and increase with each pipeline cycle.
Data is assembled from publicly available business information and licensed enrichment providers. Records supplied by those providers remain subject to each provider’s licence terms.

Tech Stack

python logo

Python

selenuim-logo

Selenium

MySQL Logo

MySQL

flask-logo

Flask