custom map you
sent so you can join it back. Run them from n8n, a script, a spreadsheet integration —
anything that can call an HTTP API with your account key.
The two paths a row can take
1
Get the person's current role
Row has a LinkedIn URL: call
Read people’s experiences with
up to 20 URLs. For a profile Tamtam already holds this is free; read
source to see
whether it was answered from the store or re-read from LinkedIn. current_experience
is the role to compare with what your file says.Row has no LinkedIn URL: call
Resolve people with
the name, company and email you have, up to 10 per call. The answer names the profile,
how sure we are (match_score), and the headline and company_name the source saw —
usually enough to read a job change without extracting anything.2
Decide whether the new role is a buyer
Take the new job title and, when you can, the new company. Resolve the company name to a
LinkedIn id with Search for a company
(free), then call
Score job titles at a company.
When the company does not resolve, call
Score job titles with no company
instead. Both are free and answer 0-100 against your account’s buyer archetypes.
3
Enrich the ones above your bar
For rows whose score clears your threshold, call
Enrich people
with the name and the new company’s domain or LinkedIn URL, then poll the request id for
the email. 1 credit per email found.
What each row costs
The two read steps are priced so that a monthly run against the same file gets cheaper
over time: a profile read once is held, and its experiences are answered from the store for
30 days, then re-read from LinkedIn for free. Set
refresh_only: true on a run that must
not spend discovery credits, and force: true on one that must see today’s LinkedIn.
Reading a job change
An experiences row gives you the person’scurrent_experience — title, company, company
LinkedIn id, start date. Compare its company_linkedin_id (or company_name) with your
file’s. Different means they moved; a newer start_date at the same company usually means
a promotion.
A resolve row gives you the headline and company_name the source reported. A headline
like "VP Sales at Fresh Corp" against a file that says Acme is a move. Treat it as a
strong hint rather than a fact: it is what Linkup or Sales Navigator saw, not something
Tamtam verified. When the row matters, confirm it with one call to
Read people’s experiences on the
linkedin_url you just got.
Threshold match_score before you spend on a resolved row. Below 50 the profile is our best
guess and may be someone else; the match_reason says what the score rests on.
The two scoring questions are different questions
at-company scores the title as held at that company: the classifier sees the company’s
size and industry, and the score is the archetype’s variant for that size band. title-only
scores the title alone and returns the archetype’s best case across bands, with
company_context: false on every row so the two readings never get mixed in your file.
Use at-company whenever the company resolves to a LinkedIn id. Use title-only when it
does not — not as a shortcut when it would.
Per-row errors, whole-batch refusals
Every operation answers each row on its own. A profile gone from LinkedIn, a company Tamtam does not hold, a name with nothing to search on: that row carries anerror code and the
rest of the batch is answered. Branch on the code in your pipeline; the codes are stable.
The one refusal that stops a whole batch is 402, and it is checked before anything runs:
when the fallback extracts or the searches a batch could need cannot be paid for, nothing in
that batch is spent. Split the batch, top up, or set refresh_only.
Batch sizes and pacing
Calls are synchronous and run their rows concurrently. With the account’s 10 requests per
second, an 80,000-row file is a few hours of resolve calls and well under an hour of
everything else; the resolve step is the one to spread out.