Build a competitor customer list in Clay with anVendor
Import anVendor competitor-use findings into Clay, keep recent matches and enrich selected accounts. Includes HTTP API settings and a ready-to-copy formula.
A company using your competitor already has a reason to use a service in your category. That makes it a useful account to research. Bring anVendor's company names, domains and findings into Clay, then add the people and context you need for a sales conversation.
This guide builds a first prospecting list for a Slack alternative. Replace Slack with a competing SaaS or business service that anVendor tracks. The workflow uses Clay's HTTP API source and your anVendor API key.
Discover companies → keep recent findings → review account fit → enrich selected contacts.
Start with one batch and ten accounts worth reviewing. Competitor use establishes relevance to your category; it does not establish a paid contract, dissatisfaction or an intention to switch.
1. Choose a competitor and create your connection
You need an anVendor account and a Clay workspace with HTTP API source access. Try your competitor in anVendor's Search leads first to see what the current coverage looks like.
In API access, create a key named Clay discovery with only the Search leads method enabled. Copy the key when it appears. This key can discover companies without starting a paid scan.
Company discovery does not spend anVendor credits. The Free plan includes 20 credits every 30 days for paid results you choose to unlock separately. Clay and any enrichment providers have their own access requirements and charges.
2. Import the first batch into Clay
In Clay, choose Actions → View all sources and open Import data from an HTTP API. Save the following header in an account selected by the source: Authorization: Bearer YOUR_ANVENDOR_API_KEY. Replace the placeholder with your key. Keep the credential in the saved account, away from table cells.
Configure the request below, preview it and map the response into a table named Competitor accounts. Clay's HTTP API instructions explain source imports and saved authentication accounts.
| Setting | Value |
|---|---|
| Method | POST |
| Endpoint | https://api.anvendor.com/v1/leads/search |
| Content-Type | application/json |
| Results path | companies |
| Pagination | Off for this first import |
Use this JSON request body, changing the service to your competitor's domain:
{
"service": "slack.com"
}The response contains a companies array. It can include recent findings, historical findings and companies still needing confirmation. The response's matches count is a discovery total, not the number of confirmed customers. If serviceUnknown is true, choose a supported service in anVendor before continuing.
3. Keep the finding beside each company
Map these fields from each company object. Preserve dates and Boolean values as returned; a missing company name can stay blank because the domain identifies the row.
| API field | Clay column |
|---|---|
domain | Company domain |
name | Company name |
location | Location |
match | Finding |
lastDetectedAt | Last detected |
lastCheckedAt | Last checked |
recentlyNotDetected | Recently not detected |
locked | Figures locked |
Add a Competitor column containing slack.com, or the service you requested. Keep the competitor and company domain together when deduplicating later imports. A company appearing under two competitors represents two distinct findings.
purchased means your anVendor account has unlocked that company's figures. It says nothing about whether the company pays the vendor. A locked row can still carry a recent finding; its adoption, headcount and estimated spend remain unavailable until unlocked.
4. Select recent findings before enriching contacts
Add a formula column called Recent finding. Clay accepts JavaScript expressions; use its column picker to insert the three references in this formula. The names must match your mapped columns. See Clay's formula guide for the editor.
["detected", "purchased"].includes({{Finding}}) &&
{{Recently not detected}} === false &&
Number.isFinite(Date.parse({{Last detected}})) &&
Date.parse({{Last detected}}) <= Date.now() &&
Date.now() - Date.parse({{Last detected}}) < 30 * 24 * 60 * 60 * 1000Download the formula. It keeps findings less than 30 days old, including purchased results, and rejects missing or invalid dates and recent checks that did not find the service. Older findings can still be useful for separate research. An unconfirmed row does not establish competitor use.
Review the selected companies and add an Approved for enrichmentcheckbox. Choose accounts whose size, market and likely needs fit your offer. For a Slack alternative, that might mean teams in a market where your product has a specific advantage.
For each contact or email enrichment step, set Only run if to:
{{Recent finding}} === true && {{Approved for enrichment}} === trueKeep auto-update off during setup and run your chosen enrichment on one approved row first. Check the resulting person and company before processing the rest. Clay's enrichment settings cover manual runs and these conditions. Re-evaluate the date formula before a later prospecting session; a saved table is a snapshot, not a continuously refreshed finding.
5. Use the credits where more detail changes your decision
The import above spends no anVendor credits. If estimated adoption or annual spend would help you prioritize an account, reveal its company-service result in anVendor, then import the updated record. Available unlocked figures appear as adoptionPercent, headcount and estimatedAnnualSpend. Missing figures stay missing; they are not zero.
- One confirmed company-service result costs 1 credit. An empty or failed check is refunded. Credits may be held while checks run. Reopening a result you already unlocked does not spend another credit; an explicit refresh can.
- Analyze costs 1 credit for a company report with findings. It covers the services found at that company, so a report containing other services can be chargeable even when your chosen competitor is absent.
For an automated paid workflow, the REST API guide documents POST /v1/scans and status polling. Use a separate key with the scan method and an explicit budget. Save the returned scan ID and poll its status; a pending response has no final verdict. Keep pending and failed rows separate from completed checks that found nothing.
6. Check the first list, then expand it
- Verify one company domain, competitor and observation date against anVendor.
- Check that an old finding, an unconfirmed company and a newer negative check all fail the Recent finding formula. Use copied sample values if the first import has none.
- Confirm that unapproved rows do not run the contact enrichment, then process the accounts you selected.
This recipe imports one response page. To collect more, send the returned next.offset as offset with the same service and filters; stop when next is null. Do not calculate the next offset from your imported row count: filtering can make those numbers differ. The API reference also describes location, industry and company-size filters.
Coverage varies by service and company. An empty page, a missing company or a check with no detection does not prove non-use. Keep the evidence date when passing selected accounts into your CRM, and add a specific reason your offer could help before contacting anyone.
Create your anVendor account to start with 20 credits every 30 days, then build your first competitor account list in Clay.
Suggest a correction · Sources and estimate limitations
Leads already using your competitor
Discover companies using SaaS and business services, with estimated adoption and annual spend to help qualify each opportunity. Free to start.
Get started free