Documentation

vaaya / docs / reference

GTM & leads

Find companies, find the people at them, reveal and verify their work emails, and qualify accounts with hiring and news signals. Nine data vendors sit behind one endpoint, each priced per call. The routing on this page encodes measured head-to-head evals, not vendor marketing: Exa first for people, a ContactOut → Tomba → Icypeas email waterfall, and a hard rule that nothing gets sent to an unverified address.

When to use which

People and emails

NeedCallPriceMode
People and contacts from a query. Start here.vaaya/onefind, then onefind-deep2¢, then per filled fieldsync, async
Find people by ICP (primary)exa/search with category: "people"1¢/querysync
Find people by ICP (fallback)contactout/people-search1¢/profilesync
Reveal a work email (try first)exa/search + exa/contents1¢ + 0.1¢/URLsync
Reveal a verified email (fallback)contactout/linkedin-contacts10¢ (free on miss)sync
Email from name + company (the rung after a ContactOut miss)tomba/email-findersync
Email (next rung, on different infrastructure)icypeas/email-search4¢ + 1¢/pollasync
Deliverability (primary, any address)tomba/email-verifiersync
Deliverability (second opinion)icypeas/email-verification2¢ + 1¢/pollasync
Deliverability (alternate)contactout/email-verifysync
All emails at a company + its patterntomba/domain-searchsync
Generic inboxes at a domain (contact@, support@…)icypeas/domain-scan4¢ + 1¢/pollasync
Email behind a LinkedIn profiletomba/linkedin-findersync
Article author + their emailtomba/author-findersync
Email → person + company (cheap reverse lookup)tomba/enrichsync
Phone by email / domain / LinkedIntomba/phone-finder10¢sync
Deep person enrich / reverse lookup incl. phonesnyne/person-enrich55¢ (lite 30¢)async

Companies and signals

NeedCallPriceMode
Companies like your best customers (≤100)openfunnel/lookalikes~1¢/companysync
Whole-market TAM from an ICP (thousands)openfunnel/tam-buildper company deliveredasync
Companies running a tech (from job posts)openfunnel/tech-companies40¢/pagesync
Tech + LLM-verified buying intentopenfunnel/tech-intent20¢/qualifiedasync
Qualify one account against a questionopenfunnel/deep-research20¢sync
Raw job postings by title/tech/salary/datetheirstack/jobs40¢/≤10 jobssync
Companies by tech stack + active hiringtheirstack/companies60¢/≤5 companiessync
One company’s tech stack with confidence + datestheirstack/technographics25¢sync
One company’s buying-intent topicstheirstack/buying-intents25¢sync
Fresh funding rounds market-widesignalbase/funding25¢/≤100 rowssync
M&A events, acquirer and targetsignalbase/acquisitions25¢/≤100 rowssync
Executive job changessignalbase/job-changes25¢/≤100 rowssync
Hiring signals market-widesignalbase/hiring25¢/≤100 rowssync
Investors DB by type and ticket sizesignalbase/investors25¢/≤100 rowssync
Funding rounds with news sourcesfundable/deals10¢/row returnedsync
Who led a round, which partner, which angelsfundable/deal-investors10¢ flatsync
A fund’s or a person’s deal historyfundable/investor-deals10¢/row returnedsync
Name → Fundable id, to enter the graphfundable/company-searchsync
Deep private-company profile (pick sections)akta/company-enrich4–35¢/sectionsync
Entity-resolved news with sentimentakta/news~2¢/10 articlessync
Alt-data: reviews, headcount, traffic, jobs, socialakta/employee-reviews11–21¢sync
SEO and PPC competitor researchspyfu/query1–3¢sync
Investor intel (thesis, partners, check size)nyne/company-funders30¢async
Who follows / replied to a profile or postnyne/person-interactions30¢async

The chain that works: OpenFunnel answers which companies, exa/search with category: "people" answers who to talk to there, and the email waterfall turns names into verified contacts. For emails the waterfall order is Exa (cheapest) → contactout/linkedin-contacts (free on a miss) → tomba/email-findericypeas/email-search. Verify every address before a real send with tomba/email-verifier.

exa: people discovery (try it first)

Price
1¢/query · exa/contents 0.1¢/URL
Latency
fast
Query style
free text, no canonicalizing needed

Exa is the primary people-discovery engine. Phrase an open ICP query (role + seniority + industry + company size + geography) and run one query per role. Read each profile’s name, title, company, and /in/ URL from the returned text.

curl -X POST https://vaaya.ai/api/run/exa/search \
  -H "Authorization: Bearer $VAAYA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "VP Sales at fintech companies with 21-100 employees in India, LinkedIn profiles",
    "category": "people",
    "numResults": 50,
    "contents": { "text": true }
  }'
  • To reveal an email, try Exa first: exa/search the person + company, then exa/contents (0.1¢/URL) on the best hits to pull the address off the page. Full Exa params on Web search.
  • ContactOut (below) is the fallback for people data; a scrape or web search is the fallback for information: an email on a page, not in a database. See Web scraping.
  • Exa takes free-text values like “Midwest” or “fintech”, and so does the ContactOut fallback. There is no filter vocabulary to canonicalize on either path.

contactout: find, enrich, verify (the people fallback)

Price
people-search 1¢/profile · linkedin-contacts 10¢ (free on miss) · person-from-email 10¢ · email-verify 2¢
Latency
fast
Mode
sync

Use ContactOut when Exa surfaces too few people, or when Exa can’t resolve the email. It replaced Prospeo here on 2026-08-22: a 25-lead probe measured 3× the hit rate with a richer payload. Filters are free text, so there is no vocabulary to canonicalize, and a miss bills nothing.

curl -X POST https://vaaya.ai/api/run/contactout/people-search \
  -H "Authorization: Bearer $VAAYA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "job_title": ["VP Sales"],
    "location": ["India"],
    "seniority": ["Vice President"],
    "page_size": 10
  }'

contactout/linkedin-contacts (10¢, free on a miss) returns work and personal emails straight from a profile URL. The parameter is profile, not linkedin_url. Add include_phone: true for phone numbers at 30¢. The response nests under profile with array fields: {"email": [...], "work_email": [...], "personal_email": [...], "phone": [...]}. Read work_email first for outbound.

curl -X POST https://vaaya.ai/api/run/contactout/linkedin-contacts \
  -H "Authorization: Bearer $VAAYA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"profile": "https://www.linkedin.com/in/satyanadella"}'

contactout/person-from-email (10¢) goes the other direction: an email becomes a name, title, company, LinkedIn URL, and work history. Use it to identify an inbound signup or reply before you respond.

Gotchas

  • The linkedin-contacts parameter is profile. Passing linkedin_url is rejected at schema validation: 0¢ and no transaction row, but also no result.
  • page_size on people-search IS the price: a page of 10 costs 10¢ whether or not you enrich anyone. Ask for what you need (max 25).
  • Boolean AND / OR / NOT work inside job_title and skills strings.
  • Never use bulk enrich endpoints. Bulk charges on misses; per-find is free on a miss.
  • On a miss, fall through to tomba/email-finder rather than retrying.

tomba: the cheap email-intelligence rung

Price
2–10¢ per call
Latency
~2s (email-finder) · ~12s (linkedin-finder)
Mode
sync

Tomba and ContactOut are complementary, not substitutes: the 2026-08-20 probe measured ContactOut at 3× the hit rate, with Tomba still adding roughly 2 fills per 10 ContactOut misses. So Tomba is the second rung, never the first. It also bills on a miss, which ContactOut does not. Tomba covers two things no other vendor here does: every known email at a company plus its pattern (domain-search), and article URL → author + email (author-finder).

  • tomba/email-verifier (2¢): the primary deliverability check, real SMTP/MX verification on any address. Read data.email.result (deliverable / undeliverable / risky).
  • tomba/email-finder (4¢): name + company/domain → most likely email with a confidence score. The best rung after a contactout/linkedin-contacts miss; prefer domain over company when known.
  • tomba/linkedin-finder (5¢): LinkedIn profile URL → email (full: true returns all associated emails). Use after email-finder, not instead of it.
  • tomba/domain-search (4¢): company/domain → all known emails + the domain’s pattern. Optional department (engineering/sales/finance/hr/it/marketing/operations/management), country (2-letter), page/limit (10|20|50). Good first step when you only know the company.
  • tomba/author-finder (4¢): article/blog URL → author name, email, socials. The hook for content-based prospecting.
  • tomba/enrich (4¢): email → person + company profile in one call. Escalate to nyne/person-enrich only when you need phone/social depth.
  • tomba/phone-finder (10¢): email/domain/LinkedIn → phone. The cheap rung before Nyne when only a number is missing.
# 1) name + domain → likely email
curl -X POST https://vaaya.ai/api/run/tomba/email-finder \
  -H "Authorization: Bearer $VAAYA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain": "stripe.com", "full_name": "Jane Doe"}'

# 2) verify before any real send
curl -X POST https://vaaya.ai/api/run/tomba/email-verifier \
  -H "Authorization: Bearer $VAAYA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email": "jane.doe@stripe.com"}'

Gotchas

  • linkedin-finder is slow (~12s median) and throws transient upstream 5xx on ~20% of calls; a retry usually clears it.
  • linkedin-finder can return a personal-domain or previous-company email. Always run tomba/email-verifier on the answer and sanity-check the domain against the target company.

icypeas: the second rung, on different infrastructure

Price
finder 4¢ · verifier 2¢ · domain scan 4¢ · poll 1¢
Latency
usually a few seconds end to end
Mode
async: launch, then poll icypeas/result

Icypeas prices match Tomba (finder 4¢, verifier 2¢) but run on different infrastructure. Fall through Tomba ↔ Icypeas on a miss, or cross-check a risky Tomba verdict before a send that matters. All Icypeas searches are async: the launch returns { "item": { "_id": ... } } immediately; poll icypeas/result (1¢) with that id every 3–5 seconds until items[0].status leaves NONE/SCHEDULED/IN_PROGRESS.

# launch → { "item": { "_id": "..." } }
curl -X POST https://vaaya.ai/api/run/icypeas/email-search \
  -H "Authorization: Bearer $VAAYA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"firstname": "Jane", "lastname": "Doe", "domainOrCompany": "stripe.com"}'

# poll every 3-5s (1¢ per poll)
curl -X POST https://vaaya.ai/api/run/icypeas/result \
  -H "Authorization: Bearer $VAAYA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"id": "<item._id>"}'
  • icypeas/email-search (4¢): name + company/domain → professional email with a certainty grade (ultra_sure/sure/…) and MX provider. Prefer a bare domain in domainOrCompany.
  • icypeas/email-verification (2¢): SMTP-level deliverability on any address; the second opinion when Tomba says risky.
  • icypeas/domain-scan (4¢): a domain’s role-based/generic inboxes (contact@, support@, admin@…). Complements tomba/domain-search, which lists people. Use this when any reachable inbox will do.
  • icypeas/result (1¢): fetch/poll by id, or list recent searches with {"mode": "single", "limit": 10}.

Gotchas

  • Status semantics: FOUND/DEBITED = hit (read items[0].results); NOT_FOUND/DEBITED_NOT_FOUND = processed but empty; BAD_INPUT/INSUFFICIENT_FUNDS/ABORTED = terminal errors.
  • The vendor caps result reads at 30/minute. Poll every 3–5 seconds, no tighter.

nyne: deep enrich, reverse lookup, investor intel

Price
person 55¢ (lite 30¢) · funders 30¢ · interactions 30¢
Latency
async; polls usually complete in under a second
Polling
nyne/result (free)
Match rate
~92%

All Nyne actions are async: the submit returns 202 with a request_id; poll nyne/result (free) with the same endpoint name until status is "completed", then read result. nyne/person-enrich is the reverse lookup: “who is this email / phone number / Instagram handle?” Pass any one identifier (email, phone, social_media_url, or name + company) and get back best work/personal emails, alternate emails, phone numbers, social profiles, work history, and seniority.

# reverse lookup from any one identifier
curl -X POST https://vaaya.ai/api/run/nyne/person-enrich \
  -H "Authorization: Bearer $VAAYA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email": "jane@acme.com"}'

# → 202 + request_id; poll until status is "completed" (free)
curl -X POST https://vaaya.ai/api/run/nyne/result \
  -H "Authorization: Bearer $VAAYA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"endpoint": "person/enrichment", "request_id": "req_..."}'
  • nyne/person-enrich (55¢, or 30¢ with lite_enrich: true): LinkedIn, X, Instagram, GitHub, and Facebook URLs all work in social_media_url; for a bare handle, build the profile URL first.
  • nyne/company-funders (30¢): investor intel for a fundraise. Pass the investor’s company_name or company_domain → thesis, partners with LinkedIn URLs, average check size, rounds, recent investments. Qualify funds before outreach.
  • nyne/person-interactions (30¢): engagement mining. social_media_url + type of replies | followers | following (plus tweet_id for one post) → the people engaging with a launch or topic, with the engagement as the outreach hook.

Gotchas

  • Billing happens at submit, not at poll. The poll itself is free.
  • Escalate here from tomba/enrich (4¢) only when you need phone numbers or social depth; it’s a 14× price jump.

openfunnel: company discovery

Price
lookalikes ~1¢/company · tech pages 40¢ · intent 20¢/qualified
Mode
sync shortlists · async at scale
Polling
openfunnel/results (free helper)

Exa, ContactOut, and Nyne find people; OpenFunnel finds companies. The chain: OpenFunnel (which companies) → exa/search with category: "people" at those companies (who to talk to) → the email waterfall (verified contacts).

curl -X POST https://vaaya.ai/api/run/openfunnel/lookalikes \
  -H "Authorization: Bearer $VAAYA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "seed_domains": ["stripe.com", "brex.com"],
    "limit": 50,
    "locations": ["USA"]
  }'
  • openfunnel/lookalikes (sync, ≤100, ~1¢/company): companies resembling seed_domains (≤10, your closed-won accounts) and/or a query. Filters: min_employees/max_employees, funding_stages, locations.
  • openfunnel/lookalikes-bulk (async, ≤2000/call): for more than 100 results. Never paginate the sync action to get there.
  • openfunnel/tam-build (async): the entire market for a plain-English ICP, thousands of companies, billed per company delivered. Poll openfunnel/results with {"kind": "tam"}, page via cursor, and use openfunnel/job-control (pause/cancel) to cap spend. Reach for it when the question is “everyone we could sell to”, not for shortlists.
  • openfunnel/tech-companies (sync, 40¢/page of 50): companies whose recent job posts mention a tech. variations covers alternate phrasings; include_evidence returns the job-post snippet, the outreach hook. The competitor-displacement and “sells-to-users-of-X” play.
  • openfunnel/tech-intent (async, 20¢/qualified): same, but an LLM verifies each company against an activity (“migrating off Redshift”). Keep limit ≤25; it’s the priciest, highest-precision signal.
  • openfunnel/deep-research (sync, 20¢): qualify one domain against an activity_question (job posts) and/or qualifier_question (LinkedIn org). Run it before drafting to a big account. The answer plus sources feed the message hook.
  • Free helpers: openfunnel/lookup-companies (canonicalize ≤100), openfunnel/options (filter vocabularies), openfunnel/results, openfunnel/job-control, openfunnel/balance.

Gotchas

  • limit on lookalikes defaults to 10 upstream. Always set it.
  • locations takes ISO alpha-3 codes: USA, not US.
  • lookup-companies takes objects like {"domain": "x.com"} or {"name": "X"}, never bare strings.
  • Async semantics: the submit returns a job_id; poll openfunnel/results until status is "completed". A null cursor on a running job does not mean done. Empty results are never billed; cancelling keeps and bills only what was already delivered.

theirstack: job postings and technographics

Price
jobs 40¢ · companies 60¢ · per-company lookups 25¢
Billing
per row returned; limit is required
Mode
sync

TheirStack is the raw data layer under the hiring-signal tools: direct filter queries over job postings themselves, plus cheap per-company tech-stack and buying-intent lookups with confidence and first/last-seen dates. Routing versus the neighbors: openfunnel/tech-companies and tech-intent answer “which companies use/need X” with LLM qualification; akta/job-posts returns one company’s postings inside an Akta profile; TheirStack is for precise posting-level filters: title, description, salary band, seniority, remote, posting date, tech mentioned.

curl -X POST https://vaaya.ai/api/run/theirstack/jobs \
  -H "Authorization: Bearer $VAAYA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "job_title_or": ["Head of Sales"],
    "job_country_code_or": ["US"],
    "posted_at_max_age_days": 14,
    "limit": 10
  }'
  • theirstack/jobs (40¢, ≤10 postings): search job posts across thousands of career sites and boards. The hiring-signal primitive: who’s hiring for role X with tech Y right now.
  • theirstack/companies (60¢, ≤5 companies): companies by firmographics (industry, headcount, revenue, funding stage), tech stack, and active hiring (job_filters + min_num_jobs_found), with the matching jobs and techs attached. The displacement/ABM finder: “Series B US companies hiring for Kubernetes”.
  • theirstack/technographics (25¢): one company (by company_domain) → its technologies with confidence (low/medium/high), job-mention counts, and first/last dates seen. The evidence-dated alternative to akta/company-enrich with sections: ["technology"] when you want the raw stack.
  • theirstack/buying-intents (25¢): one company → buying-intent topics detected in its job posts, with confidence and dates. The cheaper single-account rung when a topic-level signal is enough and you don’t need openfunnel/deep-research’s LLM answer.
  • theirstack/tech-catalog (1¢): resolve free text to the case-sensitive slugs the filters need: {"q": "kubernetes"}, with keyword_type: "technology" for techs only or keyword_type_not: "technology" for intent topics only.

Gotchas

  • The vendor bills per row returned, so limit is required (≤10 on jobs, ≤5 on companies). Page with page rather than raising limits.
  • Technology-slug filters are case-sensitive. Always resolve slugs through theirstack/tech-catalog first.
  • theirstack/jobs must include a date filter (posted_at_max_age_days) or a company filter (company_domain_or); upstream rejects unbounded queries.

signalbase: real-time GTM signal events

Price
25¢ per call, flat, whatever limit returns
Coverage
39,616 signals in the 30 days to 2026-08-10: 1,165 funding, 456 M&A, 9,108 job changes, 28,887 hiring
Mode
sync

Signalbase is the event stream: who raised, got acquired, changed jobs, or started hiring, with a date window on every query. It is the cheapest way to sweep a whole market, because the vendor bills one credit per CALL rather than per row. Set limit high (50 to 100) and page with page; issuing many narrow calls costs the same per call and returns less.

curl -X POST https://vaaya.ai/api/run/signalbase/funding \
  -H "Authorization: Bearer $VAAYA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"date_preset": "last_30d", "round": "Series A", "countries": "US", "limit": 50}'
  • signalbase/funding (25¢): rounds with type, amount, currency, company firmographics inline (headcount, country, industry, LinkedIn) and a confidence score. Filter with date_preset ("last_30d") or dateFrom/dateTo, plus round, round_flavor, amount_min/amount_max, investor_name, countries, categories.
  • signalbase/acquisitions (25¢): M&A events with both sides and the deal amount. acquiring_company and acquirer_countries filter the buyer.
  • signalbase/job-changes (25¢): executive moves filtered by positions, departments, seniorities and new_role. Names are GDPR-masked; the LinkedIn URL is present.
  • signalbase/hiring (25¢): open positions with team size and applicant counts. Wide hiring sweeps belong here because the price is flat; posting-level salary, tech and description filters belong in theirstack/jobs.
  • signalbase/investors (25¢): the investor database across type (vc, angel, pe, corporate, government, accelerator, family_office, hedge_fund, crowdfunding) with ticket_size_min/max and headquarters.
  • signalbase/companies and signalbase/people (25¢ each): company search independent of any signal, and people search that carries the matched signal inline so each result explains why now.

Gotchas

  • List filters are COMMA-SEPARATED STRINGS, not arrays: countries: "US,GB".
  • Sorting uses sort_by as the parameter name but validates against an internal enum: occurred_at, discovered_at, amount, employee_count, founded_year. Passing date or sortBy returns a 400 before billing.
  • Most rows are sourced by watching VC portfolio pages rather than news, so discoveredAt is often the time a page changed rather than the time a round was announced. On a 10-row sample taken 2026-08-27, 9 of 10 primary sources were portfolio pages and one signal dated that day traced to an article from 2024. Check the source before you treat a row as breaking news.
  • Investors come back empty on most funding rows (2 of 10 in the same sample). When you need who led a round, which partner sat on it, or the angels, use fundable/deal-investors.

fundable: the funding graph

Price
10¢ per billable row, charged on rows RETURNED · 1¢ lookups
Coverage
97k venture-backed companies, 150k+ rounds, 64k institutional investors, 34k angels
Mode
sync

Fundable answers who was actually in a funding round. fundable/deals returns rounds with a written summary, the amount, the valuation and the news articles behind them. fundable/deal-investors then opens one round into its full lineup: the firms with a lead_investor flag, the individual partner credited on that deal under personnel, and the angels, each with a profile link. Nothing else on this page resolves a partner to a specific round.

curl -X POST https://vaaya.ai/api/run/fundable/deals \
  -H "Authorization: Bearer $VAAYA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"page_size": 10, "sort_by": "most_recent_deal", "deal": {"date_start": "2026-08-20", "financing_types": [{"type": "SERIES_A"}]}}'
  • fundable/deals (10¢ per row returned, page_size ≤25): rounds filtered by deal.date_start/date_end (announcement date) or deal.created_start/created_end (when Fundable ingested the round, which is the field to page on for gap-free incremental syncs), and deal.financing_types as objects: [{"type": "SEED", "pre": true}]. Rows carry company_id, investor_ids and angel_investor_ids as bare UUIDs.
  • fundable/deal-investors (10¢ flat): one deal UUID returns the whole lineup at one price, however many investors it holds. Firms carry lead_investor, a domain and a LinkedIn URL; personnel carries the partner on that round; angel_investors carries name, LinkedIn and Twitter.
  • fundable/company (10¢): resolve a deal row’s company_id to a profile with the domain, employee band, total_raised and latest_valuation_usd. Also addressable by domain, linkedin or crunchbase.
  • fundable/investor-deals and fundable/person-deals (10¢ per row returned): walk a fund to its portfolio, or a person to every round they joined as an angel or as the partner on a firm’s deal.
  • fundable/company-deals (10¢ per row returned): one company’s entire funding history as full deal objects. fundable/company returns only the latest round.
  • fundable/company-search, fundable/investor-search and fundable/person-search (1¢ each): resolve a name to Fundable’s own id, which is what the traversals take. Skip them when you already have a domain or LinkedIn URL.
  • fundable/industry-search and fundable/location-search (1¢): resolve "fintech" to fintech-e067 and "san francisco" to san-francisco-california.

Gotchas

  • locations, industries and super_categories match on exact permalink. A hand-written value is dropped silently upstream, so the call returns unfiltered rows and still bills. Resolve every one through the two lookup endpoints first.
  • You are billed on rows RETURNED, not rows requested. Ask for 25 and match 2 and you pay for 2, so page_size (required, ≤25) is only the ceiling your balance is checked against, not a budget you spend. deal-investors and company bill flat, each being one billable unit.
  • There is no amount filter and no investor filter on fundable/deals, despite what the vendor’s own docs claim. Both are rejected before billing.
  • Entity resolution is not perfect. On a 10-row sample one round was attributed to a same-named company, and total_raised can lag the round attached to it. Trust the deal row and its source articles over the company aggregate.
  • Route wide, cheap event sweeps to signalbase/funding (25¢ flat for up to 100 rows) and come here for the people in a round.

akta: private-company depth and news signals

Price
4–35¢ per section · news ~2¢ per 10 articles
Coverage
20M+ private companies, 70+ datapoints
Mode
sync

OpenFunnel finds which companies; Akta tells you everything about one: rich narrative sections with sources, plus de-duped, entity-resolved news. akta/company-search and akta/industry-search (both free) resolve a name (“Canva”) or free-text industry (“warehouse automation”) to Akta’s uuid or taxonomy code; domains work directly. Request only the sections you need:

curl -X POST https://vaaya.ai/api/run/akta/company-enrich \
  -H "Authorization: Bearer $VAAYA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"company": "canva.com", "sections": ["firmographic", "funding_detail"]}'
PriceSections
trust_signal · company_hierarchy · digital_presence · financial_estimate · location
customer_profile · industry
11¢management_profile · strategic_signal
14¢firmographic · business_model · company_assessment · product_offering · technology
21¢funding_detail
35¢mna_and_investment
  • akta/news (~2¢ per 10 articles, limit ≤100): de-duped, entity-resolved news with sentiment, an AI summary, and tagged company mentions. Scope by company (website URL), industry (code from industry-search), or free-text query. Additive filters: sentiment_list (positive/negative/neutral), type_list (tag codes: CM01 fund-raising, WT01 strategic hiring, SD01 product launches, SD02 partnerships), news_score_list (High/Medium/Low relevance), and start_date (YYYY-MM-DD) for incremental polls.
  • Alt-data by domain or uuid: akta/employee-reviews (11¢, ≤50/page) · akta/product-reviews (11¢) · akta/headcount-trends (18¢) · akta/website-traffic (11¢) · akta/job-posts (21¢) · akta/social-posts (11¢). Hiring, growth, culture, and demand signals for qualifying accounts.

Gotchas

  • Section names are singular: firmographic, not firmographics.
  • Run akta/company-search (free) first when a company name is ambiguous.

spyfu: SEO and PPC competitor research

Price
1–3¢/call
Mode
sync
Settlement
MPP, no API key

SpyFu answers the search-marketing questions about a competitor: the keywords a domain ranks for or bids on, its SERP positions, its ad history, and who it competes with. One gateway action, spyfu/query. Pass path, a SpyFu v2 API path such as apis/domain_stats_api/v2/getLatestDomainStats, plus that operation’s own query params, like domain. Allowed families: domain_stats_api, serp_api, keyword_api, competitors_api, cloud_ad_history_api, organic_history_api.

curl -X POST https://vaaya.ai/api/run/spyfu/query \
  -H "Authorization: Bearer $VAAYA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"path": "apis/domain_stats_api/v2/getLatestDomainStats", "domain": "stripe.com"}'

Outreach discipline

Rules that keep deliverability and your sender reputation intact:

  • Verify before every send. tomba/email-verifierdeliverable is the gate; cross-check a risky verdict with icypeas/email-verification when the send matters.
  • Personalize every send. Generic blasts get sender accounts flagged. Reference something real: their post, their product, the trigger event.
  • No bought lists. They bounce, and bounces kill deliverability. Build lists with search + enrichment instead.
  • No cold WhatsApp, ever. It burns numbers and trust.
  • Respect LinkedIn caps: roughly 25 invites/week and 30 DMs/day per account. Volume beyond that means a longer timeline or an email-first mix.
  • Per-find enrichment only, never bulk. Bulk charges on misses; per-find is free on a miss.
  • Sharpen a vague ICP before burning paid search. Nail down the revenue band, geography, and titles first. Both Exa and the ContactOut fallback take free text.