waterfall_tech
Find ONE company's tech stack, trying sources in turn and stopping at
the FIRST that returns it (native waterfall) — or, with technologies, at the
first that detects one of them.
Steps (default order): lemlist (domain — lemlist's company record: website and
business tools, kept when lemlist scores them CONFIRMED or LIKELY; no credits,
one call of the key's search quota) → dataforseo (domain — what the WEBSITE runs, from
DataForSEO's index: CMS, framework, hosting, analytics, e-commerce, payment) →
apify (domain — the same, by a live crawl of the site now: for a site the index
has not seen) → apollo (domain — Apollo's company record: website AND business
tools, ~100 names with categories) → aiark (domain — AI Ark's company record,
the same kind of mix) → theirstack (domain or name — what the company's JOB POSTINGS
name: CRM, ERP, data stack, internal tools; far more names, dearer, thin on small
companies). The website sources give display names (Next.js), TheirStack gives
slugs (next-js): matched compares them loosely.
To know whether a company uses a given tool, pass it in technologies: a
source that does not detect any of them does NOT stop the cascade (the next
one sees other things), and found: false means none of the sources detected
it — not that the company does not use it. To read back-office tools first,
call with providers=["theirstack"].
Order: your steps setting on this connector's card if set (an org
default, or your own override), kept as written; else the default order above,
where the free steps run first, then lemlist's database on your OWN lemlist key
(no credits, your own quota), then the other providers you hold your own key
for, and the shared keys next. A provider with no usable key is skipped without
being called. Each step
uses THAT provider's key and is billed by it, exactly as a direct call of its
tool — the waterfall adds no cost. A step whose inputs are missing, or whose
connector is not activated for this org, is skipped too. Give every input you
have. One contact per call; for a list, run it from a recipe (for_each).
Returns {found, provider, tech: {technologies, count, source ("website" | "vendor_database" | "job_postings"), by_category?, matched?}, attempts, order_from} —
attempts says, step by step, what happened (found / no_match /
skipped / failed / withheld / pending, with the code, the message and the key
used); order_from says where the order came from (call / setting / default);
pending gives the collect call of the asynchronous step the cascade stopped
at.
Tool call template
This tool declares no required parameters. Add optional parameters from the input schema as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {},
"name": "waterfall_tech"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| _org | No | Org (id) de CET APPEL. `oto_list_orgs()`. | |
| _group | No | Équipe (id) de CET APPEL, sous son org parente. | |
| domain | No | the company's website domain (`acme.com`; a URL is accepted). | |
| _run_id | No | OBLIGATOIRE à chaque appel dès `run_start` ou `data_claim_next` : sans lui, l'écriture sur une ligne réservée est refusée. Hérité seulement si le serveur tient un run actif — n'y compte pas. | |
| dry_run | No | return the plan (order, key per step, arguments, skips) without calling anything. `planned` is not a promise: the connector's activation for your org is only checked by the real call. | |
| _project | No | Projet (id) de CET APPEL — jeton PRIMAIRE. `oto_project(op='list')`. | |
| _instance | No | Instance de connecteur PRÉCISE (un credential exact). `oto_instance(op='list')`. | |
| providers | No | the steps to try for THIS call, in this order — keys from the list above. Overrides your setting. Never a tool name. | |
| company_name | No | the company's name, when the domain is unknown (TheirStack only). | |
| technologies | No | the tools you are looking for (e.g. ["Shopify", "HubSpot"], or one comma-separated string). Omitted = the first stack found. | |
| apify_max_usd | No | a cost ceiling for each Apify run of this lookup (≥ 0.50 — Apify refuses less; above your organization's ceiling per run, $25 unless its admins set another, the step is refused). Omitted = the ceiling Apify launches take by default: derived from the run's size, else the platform default ($5), and never above that ceiling. | |
| max_paid_steps | No | at most this many PAID provider calls for this lookup (free steps don't count); the steps past it are skipped. Omitted = no limit — the default: set it when spend matters more than finding. |