Reverse Contact
Sales IntelligenceConnect AI agents to Reverse Contact, a real-time email and contact enrichment API. Agents turn an email address or a name and company into a resolved profile before a flow decides how to route the lead.
What This Integration Enables
Reverse Contact answers one question well: given a fragment, who is this. An email address, a name plus a company, a domain, or a public social profile URL goes in, and a resolved person or company comes back with headline, current employer, industry, location, and optionally the full experience, education, and skills profile. For an agent, the useful property is that the synchronous path is genuinely synchronous. Enrich Person and Enrich Company return the result in the response, so a routing decision can be made inside the same flow step rather than parked behind a job id.
The pricing model shapes good flow design more than the feature list does, so it is worth stating. Enrich Person and Enrich Company cost 2 credits when a match is found and 0 when none is, with fullProfile adding 1. Get Person Profile and Get Company Profile cost 1 credit on a cache hit and 0 on a miss. Search People and Search Companies cost 1 credit per page. Check Person Profile, Check Company Profile, Get People Search Fields, Get Company Search Fields, Get Usage, and Get Job Result are free. The pattern that falls out is obvious once you see it: check before you fetch, read the cache before you scrape, and call Get Usage before a batch rather than after it fails. One trap sits inside that: the free checks still require a non-empty balance and return a NO_CREDITS error when the workspace is empty, so an exhausted account fails the cheap step too.
The connector has no triggers, and the async actions do not create one. Fetch Person Profile Live, Fetch Company Profile Live, and the three Resolve actions reply immediately with a webhookId. You either poll Get Job Result until the status moves from in_progress to succeeded, which is free and does not count against the per-minute rate limit, or you supply a webhookUrl and Reverse Contact posts to an endpoint of your choosing. That endpoint is yours; it is not a FlowRunner trigger, and registering it does not cause FlowRunner to receive events. For most person and company lookups the vendor recommends the synchronous Enrich actions anyway, which returns the same data without any of that machinery.
Without FlowRunner
With FlowRunner
Use Case Scenarios
The signup that routes itself correctly
A trial signup arrives with a work email and nothing else. Before spending anything, the agent calls Get Usage to confirm the workspace has credits and is not near its per-minute window. Enrich Person then resolves the address, returning the matched person under data.person and any alternative candidates alongside. The agent reads seniority and current employer, calls Enrich Company on the domain to attach employee count and industry, and writes both onto the record in HubSpot. A signup that resolves to a director at a 400-person manufacturer routes to the enterprise queue; one that resolves to a student, or to nothing at all, routes to self-serve. Nothing here is guessed from the domain suffix, which is what the routing rule was doing before.
Backfilling a CRM without burning the balance
A few thousand contacts in Attio are missing job titles. The naive flow calls Enrich Person on every one of them and finds out how the credit model works the hard way. The better flow uses the free surface first: Check Person Profile confirms whether a profile exists in the database and when it was last updated, without returning it and without charging. Records with no profile are skipped entirely. Records with a stale profile go to Get Person Profile, which costs 1 credit on a cache hit and 0 on a miss. Only the ones that matter and are genuinely out of date go to Fetch Person Profile Live to force a fresh scrape, with Get Job Result polled for free until the job succeeds. The agent writes results back and appends a per-record credit tally to Google Sheets so the next backfill is budgeted rather than estimated.
Two sources, one record
Hunter returns a likely email for a prospect but not much about the person behind it. The agent passes that address to Enrich Person, which resolves the name, title, and current employer and returns alternatives when the match is ambiguous. The interesting case is when the alternatives block is populated: two people with the same name at similar companies is a genuinely undecidable situation, and a flow that silently takes data.person because it is first is quietly assigning a stranger's job history to your prospect. The agent writes the confident matches straight through and pushes the ambiguous ones to a review queue in Slack with both candidates shown.
Human-in-Loop Highlight
There is a line inside this connector that no API error will ever tell you that you crossed. On one side, Enrich Person takes an email that someone gave you and fills in who they are, which is enrichment of a relationship that already exists. On the other, Search People queries the Reverse Contact database with filters on title, industry, employee count, and location, combined with AND, and returns a page of real named individuals who have never contacted you, at 1 credit per page. Both are single actions in the same connector and they cost roughly the same. They are not the same act. The second one manufactures a list of people, many of them in the EU where the profiles Reverse Contact resolves are personal data with a data subject attached, and the filter set is the entire specification of who ends up on it. What makes this worth a gate rather than a policy document is that filter sets outlive the person who wrote them: a flow set up for one campaign keeps producing names for a year, and nobody reviewing the CRM later can reconstruct why those particular people were targeted. So the agent builds the query and stops before running it at scale. It calls Get People Search Fields, which is free, to resolve exactly which filters the API accepts and what values they take, runs a single page of Search People as a sample, and asks the demand generation owner: "Proposed filter, title contains 'Head of Payroll', country DE, employee count 200 to 1000. Sample page returns 100 named individuals, 4,300 total matches, 43 credits to pull in full. These people have had no contact with us. Approve this filter set, or narrow it before the full pull?" Making this a human-in-the-loop step is the thing that makes the rest of the connector safe to run unattended, because every other action in it is answering a question about someone you already know.
Agent Capabilities
17 actionsSynchronous Enrichment
2- Enrich Person Resolves a person from any combination of email, first name, last name, and company domain or name, with at least one identifier required. Returns the matched person under data.person and any alternative candidates under data.alternatives. Set fullProfile to true to also return experience, education, and skills for one extra credit. Costs 2 credits on a match and 0 when nothing matches, and returns in the response rather than as a job, which makes it the right choice inside a routing decision.
- Enrich Company Resolves a company from its domain and returns the match under data.company. Set fullProfile to true to also return the complete company profile for one extra credit. Costs 2 credits when a company is found.
Cached and Live Profiles
6- Get Person Profile Retrieves a full person profile from the Reverse Contact cache using either a public social profile URL or a Reverse Contact person id. Costs 1 credit on a cache hit and 0 on a miss, which makes it the cheap read to try before forcing a fresh scrape.
- Fetch Person Profile Live Triggers a fresh scrape of a person profile from a public social profile URL or a person id, supplying exactly one. Replies immediately with a webhookId; collect the result with Get Job Result or supply a webhookUrl of your own to receive it by push. Costs 1 credit when the profile is delivered.
- Check Person Profile Checks whether a person profile exists in the database and when it was last updated, without returning the profile. Free, but it still requires a non-empty credit balance and returns a NO_CREDITS error when the workspace is empty. The gate step that keeps a backfill from paying for records that do not exist.
- Get Company Profile Retrieves a full company profile from the cache using a public social company URL or a Reverse Contact company id. Costs 1 credit on a cache hit and 0 on a miss.
- Fetch Company Profile Live Triggers a fresh scrape of a company profile from a public social company URL or a company id, supplying exactly one. Replies with a webhookId for polling or push delivery to your own endpoint. Costs 1 credit when the profile is delivered.
- Check Company Profile Checks whether a company profile exists and how fresh it is, without returning it. Free, subject to the same non-empty balance requirement as the person check.
Async Resolve Jobs
4- Resolve Person From Email Asynchronously resolves a person from an email address, replying with a webhookId to poll or push. Costs 2 credits when a person is found and 0 when not. For the same data without polling, the synchronous Enrich Person is the vendor's own recommendation.
- Resolve Person From Name Asynchronously resolves a person from a first name, last name, and optionally a company domain or name, replying with a webhookId. Costs 2 credits on a match and 0 otherwise.
- Resolve Company From Domain Asynchronously resolves a company from a domain, replying with a webhookId. Costs 2 credits live or 1 cached when a company is found.
- Get Job Result Returns the status and result of a job created by a Live or Resolve action, where status is in_progress, succeeded, or errored and the enrichment result appears in data on success. Free, and it does not count against the per-minute rate limit, so a polling loop is not the thing that trips your quota.
Database Search
4- Search People Searches the database for people matching supplied filters combined with AND, returning results under data.data and pagination under data.metadata at 1 credit per page. This action produces named individuals who have no relationship with you, which is why the filter set behind it deserves a person's approval rather than a config value.
- Search Companies Searches the database for companies matching supplied filters combined with AND, with the same response shape and the same 1 credit per page.
- Get People Search Fields Returns metadata for every filter Search People accepts, including field names, types, and value hints. Free, so a flow can validate a proposed query before it costs anything or returns anyone.
- Get Company Search Fields Returns metadata for every filter Search Companies accepts, with the same field, type, and hint detail. Also free.
Account Status
1- Get Usage Returns the workspace credit balance and rate limit status. The data field is always null; everything useful sits in the quotas block, including remaining credits and the per-minute and daily windows. Free, and the correct first call before any batch that will spend.
Frequently Asked Questions
What can FlowRunner do with Reverse Contact?
FlowRunner agents can run Enrich Person, Enrich Company, and Get Usage in Reverse Contact, plus 14 more actions.
Does connecting Reverse Contact to FlowRunner require OAuth?
No. Reverse Contact connects to FlowRunner with an API key, no OAuth flow required.
Can Reverse Contact trigger a FlowRunner workflow automatically?
Reverse Contact doesn't currently expose triggers in FlowRunner. It connects as an action step inside workflows started by another trigger.
Start building with Reverse Contact
$100 in credits. No card required. Connect in minutes.