A practical guide to competitor research
Use Keywords Data to investigate search-volume estimates and advertising metrics for your chosen terms. Keep the data source and period with every record.
Separate CPC and paid competition from organic difficulty. A costly advertising keyword can still have search results that need a completely different content strategy.
- SERP endpoints observe search result pages. Labs provides indexed and analytical relationships across keywords, domains, and pages.
- Set the keyword, search engine, location, language and device. Preserve those settings with each observation so ranking comparisons describe the same audience and market.
- Research organic search, maps, news, images, shopping and other supported result types. Use item types to interpret the fields returned by each endpoint.
Choose comparable competitors
Use supported Labs suggestions and intent labels to organize the seed set. Inspect suggested terms for relevance rather than publishing a page for every variation.
Collect SERP observations for the queries you selected and group the ranking URLs by domain. This creates a bounded comparison for those queries only.
Collect organic results, ads and search features across supported search engines, markets and devices. Use structured JSON, HTML and source-specific collection options for rank tracking and competitive research.
- Use comparable inputs for repeated research. Inspect the source context before interpreting a change as a trend.
- Plan API requests for individual tasks or discuss a bulk dataset when your analysis needs a broader historical view.
- Represent real-world search tasks. Tasks must reflect what humans and agents actually search for.
| Example dataset | Released | Tasks | Memorized | Saturated | Grading cost |
|---|---|---|---|---|---|
| Source citations [ 5 ] | Apr 2025 | 1,266 | 48% | ✓ | 26 samples |
| Brand mentions [ 6 ] | Aug 2025 | 200 | 59% | ✓ | 80 samples |
| Prompt research [ 7 ] | Jan 2026 | 900 | 61% | ✓ | 16 samples |
| Illustrative sample | Jul 2026 | 500 | unmeasurable | ✗ | 18–50 samples |
| Market research (ours) | Oct 2026 | 547 | 9% | ✗ | 2 samples |
Keep the query, market, device and observation date in your table. This allows later checks to compare the same research conditions.
Compare the questions answered by competing pages with your own product and guide coverage. A meaningful gap is an unmet user need that your team can answer accurately.
Check whether the result format matches the query: a technical example, a product explanation, a comparison or an instructional guide. Choose the format before drafting.
Collect demand and intent
Build a scoped ranking sample
Publish a focused page that answers the identified question and links to the relevant product documentation. Include original examples and explicit limitations.
After deployment, use Search Console
to review
queries, impressions and indexing. Use analytics to distinguish visitors from qualified leads or
useful product actions.
Revisit the same research set at a sensible cadence. Changes in a small SERP sample can guide investigation but do not establish total market share.
Find useful content gaps
Checklist: Begin with the searchers and markets you serve. A company that competes commercially may not rank for the same queries, and a ranking competitor may not sell the same product.
Checklist: Create a small seed set covering product, problem and informational queries. Keep the location, language and device consistent when collecting Explore SEO Labs API →
Evaluate link evidence carefully
Checklist: Review the actual ranking pages to identify the type of answer searchers receive. Homepages, category pages and tutorials can serve different intents for similar keywords.
Checklist: Use Keywords Data to investigate search-volume estimates and advertising metrics for your chosen terms. Keep the data source and period with every record.
Measure the resulting work
Checklist: Separate CPC and paid competition from organic difficulty. A costly advertising keyword can still have search results that need a completely different content strategy.
Checklist: Use supported Labs suggestions and intent labels to organize the seed set. Inspect suggested terms for relevance rather than publishing a page for every variation.
Choose comparable competitors
Checklist: Collect SERP observations for the queries you selected and group the ranking URLs by domain. This creates a bounded comparison for those queries only.
Collect demand and intent
Research organic search, maps, news, images, shopping and other supported result types. Use item types to interpret the fields returned by each endpoint.
Build a scoped ranking sample
Checklist: Keep the query, market, device and observation date in your table. This allows later checks to compare the same research conditions.
Find useful content gaps
Checklist: Compare the questions answered by competing pages with your own product and guide coverage. A meaningful gap is an unmet user need that your team can answer accurately.
Evaluate link evidence carefully
Checklist: Check whether the result format matches the query: a technical example, a product explanation, a comparison or an instructional guide. Choose the format before drafting.
Measure the resulting work
Checklist: Prioritize topics where the product can provide useful evidence. Avoid unsupported coverage, invented benchmarks and competitor claims you cannot substantiate.
Choose comparable competitors
rank_group describes a position within a result type, while rank_absolute describes placement across the results page. Keep both when ads or rich features affect visibility.
Collect demand and intent
Checklist: If an external source is connected, preserve its definitions and collection date. Authority scores from different graphs should not be combined as though they were identical.
- The demo records are illustrative. Discuss production access, request volume, and collection cadence with the DataSEO team.
- Set the keyword, search engine, location, language and device. Preserve those settings with each observation so ranking comparisons describe the same audience and market.
- Research organic search, maps, news, images, shopping and other supported result types. Use item types to interpret the fields returned by each endpoint.
Checklist: Inspect relevant referring pages rather than treating a count as a quality verdict. Context and relevance matter when evaluating a possible outreach opportunity.
| Market research | Track a consistent set of keywords, locations, and devices over time. * * Build keyword sets from suggestions, related searches and topic ideas. Compare search demand, intent and difficulty before prioritizing a topic. | |
|---|---|---|
| Graded against | fixed, audited answer key | rubric and re-fetched pages |
| Cost per graded answer | 0.0004 samples | 0.88 samples |
| Grading time per answer | 15 s | 7.6 min |
| Cells decided by an LLM | 4.5% | every record |
| Completeness checked against a full set | ✓ | ✗ |
Checklist: Publish a focused page that answers the identified question and links to the relevant product documentation. Include original examples and explicit limitations.
Build a scoped ranking sample
Checklist: After deployment, use Search Console to review queries, impressions and indexing. Use analytics to distinguish visitors from qualified leads or useful product actions.
Checklist: Revisit the same research set at a sensible cadence. Changes in a small SERP sample can guide investigation but do not establish total market share.
Find useful content gaps
// Server-side example; configure your deployment and credentials. const url = new URL("/v3/dataforseo_labs/google/search_intent/live", process.env.DATASEO_API_ORIGIN); const auth = Buffer.from(`${process.env.DATASEO_LOGIN}:${process.env.DATASEO_PASSWORD}`).toString("base64"); const response = await fetch(url, { method: "POST", headers: {Authorization: `Basic ${auth}`, "Content-Type": "application/json"}, body: JSON.stringify([{"keywords": ["trail running shoes"]}]) }); if (!response.ok) throw new Error(`HTTP ${response.status}`); const data = await response.json(); for (const task of data.tasks ?? []) { if (task.status_code !== 20000) throw new Error(task.status_message); } // Use task.result only after checking task status.
In practice: Begin with the searchers and markets you serve. A company that competes commercially may not rank for the same queries, and a ranking competitor may not sell the same product.
See open roles- Illustrative comparison
- Illustrative comparison
- Illustrative comparison
- Illustrative comparison
- Illustrative comparison
- Illustrative comparison
- Illustrative comparison
- Illustrative comparison
- Illustrative comparison
- Illustrative comparison
- Illustrative comparison
- Illustrative comparison