Add Competitor Discovery to Your Product
Pass any domain and get verified competitors ranked by relevance. Same engine that powers ChampSignal.
[
{
"hostname": "sketch.com",
"name": "Sketch",
"competitorType": "DIRECT",
"confidence": "HIGH",
"reason": "Mac-native vector UI design tool for product teams",
"shortDescription": "Mac UI design tool",
"description": "Sketch is a Mac-native design tool for UI/UX teams with prototyping and developer handoff.",
"sourceUrls": ["https://sketch.com"]
},
{
"hostname": "penpot.app",
"name": "Penpot",
"competitorType": "DIRECT",
"confidence": "HIGH",
"reason": "Open-source browser-based design and prototyping platform",
"shortDescription": "Open-source design tool",
"description": "Penpot is a free, open-source UI design tool with real-time collaboration and code-friendly exports.",
"sourceUrls": ["https://penpot.app"]
},
{
"hostname": "miro.com",
"name": "Miro",
"competitorType": "INDIRECT",
"confidence": "MEDIUM",
"reason": "Visual collaboration workspace used for brainstorming and product discovery",
"shortDescription": "Visual collaboration platform",
"description": "Miro is a collaborative whiteboard platform used for brainstorming, diagramming, and workshops.",
"sourceUrls": ["https://miro.com"]
}
// ... more competitors
]Why
Finding Competitors Is Harder Than It Looks
If you are a founder-builder, you can ship competitor discovery without months of data work.
The problem
Building your own competitor finder is hard
Generic search APIs miss the mark
Your onboarding asks users to manually add competitors
The solution
Ship competitor discovery without months of setup
Refined through countless iterations
Better onboarding for your users
Who It's For
Technical Founders
Need competitor discovery in the product without building the full data pipeline
Founder-Builders
Want onboarding to show useful market context as soon as a user signs up
Benefits
Ship Competitor Discovery Without Building It
Built for founders shipping onboarding and market-intel features.
Better Onboarding
Help Users Find Competitors Automatically
Pass a hostname when a new user signs up. We return their competitors so you can pre-populate their workspace. Less manual work for them, faster value for you.
Pre-fill competitor lists at signup
Reduce time-to-value for new users
Higher activation from day one
Built for B2B SaaS onboarding flows
Hard to Build
Skip months of data wrangling
Building a good competitor finder is hard. You need the right data sources, logic to filter noise, and constant tuning. We did that work so you do not have to.
No data sourcing on your end
Direct and indirect competitors classified
Same engine that powers ChampSignal
[
{ "hostname": "sketch.com", "name": "Sketch", "description": "Mac-native vector design tool", "primaryMarket": "Prosumer", "foundedYear": 2010, "employeeSize": "201-1k", "ownership": "Private" },
{ "hostname": "penpot.app", "name": "Penpot", "description": "Open-source design tool", "primaryMarket": "Prosumer", "foundedYear": 2021, "employeeSize": "11-50", "ownership": "Private" },
{ "hostname": "miro.com", "name": "Miro", "description": "Visual collaboration platform", "primaryMarket": "Enterprise", "foundedYear": 2011, "employeeSize": "1k+", "ownership": "Private" }
// ... more competitors
]Enrichment
Add business details when you need them
Get enriched company data for each competitor: pricing, target market, employee size, founded year, and ownership status.
Starting price with billing details
Target market (Consumer to Enterprise)
Employee count and founded year
Public/private status with stock ticker
Pricing
Pay-As-You-Go for Founder-Builders
Add competitor discovery to your product without another data project.
Competitor Finder API
Find top competitors for any company and make onboarding more useful.
$0.10 per competitor found
Pay only for what you use.
One endpoint, two steps
Find Competitors
POSTPass a hostname, get competitors ranked by relevance
Poll Results
GETCheck job status and retrieve results when ready
Fast & Reliable
JSON responses. Cached hosts return fast, new hosts analyzed in up to 15 minutes.
FAQs
Frequently Asked Questions
Got doubts? We've got answers. Here are some of the most common questions and answers.
Still have questions? Our team is here to help!
This is the same engine that powers ChampSignal. We return direct, indirect, and alternative competitors ranked by relevance, each with a confidence level and source URLs.
Results are returned asynchronously. You submit a request and get a job ID, then poll until results are ready. For companies in our database, results come back in seconds. For new companies, it can take up to 15 minutes.
Each competitor includes: hostname, name, type (direct/indirect/alternative), confidence level (high/medium/low), a reason explaining the competitive relationship, a short description, a full description, and source URLs that verify the relationship.
Contact us to get API access. We'll set you up with an API key and help you plug it into onboarding or market-intel flows. Pay only for what you use.
No. It is pay-as-you-go. You are charged $0.10 per competitor found. No monthly fees, no minimums. Good for founders who want to start small.
API Reference
Complete API Documentation
Everything you need to integrate the Competitor Finder API.
Authentication
All requests require a Bearer token in the Authorization header.
Authorization: Bearer YOUR_API_KEY Contact us to get an API key.
/api/competitorsFind Competitors
Submit a hostname to discover its competitors. Returns a job ID for polling.
Request headers
| Header | Value |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/json |
Request body
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| hostname | string | Yes | - | The hostname to find competitors for (e.g. "figma.com") |
| exclude | string[] | No | [] | Hostnames to exclude from results |
| quality | "low" | "medium" | "high" | No | "medium" | Lower quality is faster. Higher quality is slower and more accurate. Jobs can take seconds to 15 minutes. |
Response (200)
{
"jobId": "abc123"
}Hostnames are validated via DNS resolution. Invalid or dead domains return 400.
/api/competitors/{jobId}Get Results
Poll for job status and retrieve competitor data when ready.
Request headers
| Header | Value |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
Response when pending (202)
{ "status": "PENDING" }or
{ "status": "RUNNING" }Response when complete (200)
[
{
"hostname": "sketch.com",
"name": "Sketch",
"competitorType": "DIRECT",
"confidence": "HIGH",
"reason": "Mac-native vector UI design tool for product teams",
"shortDescription": "Mac UI design tool",
"description": "Sketch is a Mac-native design tool for UI/UX teams...",
"sourceUrls": ["https://sketch.com"]
}
]Response when failed (500)
{ "status": "FAILED" }or
{ "message": "Run completed without output" }Response Fields
Each competitor object contains these fields.
| Field | Type | Description |
|---|---|---|
| hostname | string | Canonical hostname (lowercase, no www) |
| name | string | Brand/company name with proper capitalization |
| competitorType | "DIRECT" | "INDIRECT" | "ALTERNATIVE" | DIRECT = same category & ICP. INDIRECT = different category, same job-to-be-done. ALTERNATIVE = substitute approach. |
| confidence | "HIGH" | "MEDIUM" | "LOW" | HIGH = multiple authoritative sources. MEDIUM = at least one credible source. LOW = inferred. |
| reason | string | One sentence explaining the competitive relationship |
| shortDescription | string | ~5 word description of the competitor |
| description | string | 2-3 sentence description |
| sourceUrls | string[] | URLs of pages that verify this competitor relationship |
Error Codes
| Code | Meaning | Body |
|---|---|---|
| 400 | Invalid request (bad hostname, bad exclude array, DNS failure) | { "message": "..." } |
| 401 | Missing or invalid API key | { "message": "API key required" } or { "message": "Invalid API key" } |
| 402 | Insufficient API credits | { "message": "Insufficient API credits" } |
| 404 | Job ID not found | -- |
| 408 | Job timed out | { "message": "Job timed out. Please try again." } |
| 500 | Job failed or completed without output | { "status": "FAILED" } or { "message": "Run completed without output" } |


