Competitor Analysis AI: SEO & Content Report
Pricing
from $0.20 / intelligence report
Competitor Analysis AI: SEO & Content Report
Competitor analysis from the signals you already have. Combines SERP rankings, content and social notes into a manager-ready report: threat level, strengths, weaknesses, content gaps, social momentum and up to six prioritized moves. Bring your own data; no scraping.
Pricing
from $0.20 / intelligence report
Rating
0.0
(0)
Developer
Turgay NANTA
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a month ago
Last modified
Share
Competitor Analysis AI: Turn SERP, Content and Social Signals into a Strategy Report
You have notes on a competitor scattered everywhere: keyword rankings from an SEO tool, observations about their pricing page, follower counts, a scraper export of their blog. Turning that pile into "what do we do next?" is the slow part.
Give the Actor what you know about one competitor. It synthesizes the signals into a manager-ready competitor analysis: a threat level with a reason, the competitor's strengths and weaknesses, content gaps, social momentum, a prioritized plan of up to six strategic moves with impact, effort and expected result, quick wins, and the single first move to make.
- Bring your own signals: plain text notes or
{type, title, content, metric}objects from any SEO, SERP or social tool. - Three signal types in one report: SERP (rankings, keywords), content (pages, pricing, features) and social (followers, engagement).
- Decisions, not raw data: every report ends with a first move and a prioritized action table.
- Grounded: the model is told to use only your signals and to write "insufficient data" where a signal is missing; estimated gains are marked "est.".
- Five output languages: English, Turkish, German, Spanish, French.
What it costs: $0.20 per report plus $0.02 per signal analyzed; a report on 10 signals is about $0.40. Details in Pricing.
This Actor does not browse the web or run searches itself. It analyzes the signals you provide, so there is no hidden collection cost and the analysis is only as current as your data.
At a glance
| Input | Competitor name or domain + a list of signals (sources) |
| Output | Strategic action table (dataset) + full report (key-value store COMPETITOR_REPORT) |
| Analysis | Threat level, strengths, weaknesses, content gaps, social momentum, up to 6 prioritized moves, quick wins, first move, executive summary |
| Signal types | serp, content, social; inferred from the text when you leave the type out |
| Focus options | Competitor comparison, content gaps, social signals, SEO position, pricing signals |
| Pricing | Per signal analyzed + per report; see Pricing |
| Runs on | Apify Console, API, schedules, n8n, Make, Zapier, AI agents via MCP |
Quick start
- Type the competitor's name or domain into Competitor.
- Replace the sample Source signals with your own: one line per observation, or objects with
type,title,contentandmetric. - Pick the focus dimensions and the output language, then click Start.
- Open the Dataset tab for the action table and the key-value store for
COMPETITOR_REPORT.
The input comes with three sample signals about a CRM competitor, so you can see a full report before adding your own data.
What the action table looks like
| Priority | Strategic Move | Impact | Effort | Expected Result |
|---|---|---|---|---|
| 1 | Publish a comparison page targeting "best crm software" with a demo video | High | Medium | Close part of the ranking gap on the keyword (est.) |
| 2 | Create content for "cheap crm", where the competitor has no page | Medium | Low | Capture an uncontested keyword |
| 3 | Run a weekly social series while their engagement is falling | Medium | Low | Est. growth in share of voice |
Illustrative example; your run reports its own findings, based only on the signals you provide.
Why marketers use it
Competitor tools are good at collecting numbers: rankings, backlinks, follower counts. What they rarely do is combine different kinds of evidence into a plan. This Actor reads your SERP, content and social signals together and writes the plan:
- It synthesizes, not repeats. The model is instructed to turn the signals into decisions rather than restate them.
- It anchors on the worst case. When signals are analyzed in several batches, the highest threat level found is the one reported, with its reason.
- It counts repetition. A strength or content gap that shows up in several batches ranks higher than one mentioned once.
- It ends with moves. Up to six strategic moves with impact, effort and an expected result, a list of quick wins with the reason each one is quick, and one first move.
- It is honest about estimates. Percentages in expected results are prefixed with "est."; missing evidence is reported as "insufficient data".
Raw competitor data vs. this Actor
| Raw data from an SEO or social tool | This Actor | |
|---|---|---|
| Combines SERP, content and social | You do it by hand | Yes, in one report |
| Threat assessment | No | Yes, with a one-sentence reason |
| Strengths and weaknesses | You interpret | Listed, ranked by repetition |
| What to do next | No | Prioritized moves, quick wins, first move |
| Language for your boss or client | Usually one | Five, chosen per run |
What you get
Dataset: the strategic action table
One row per move, in priority order: Priority, Strategic Move, Impact, Effort, Expected Result. Up to six moves. If no move could be produced, the dataset holds one row pointing to the report instead of being empty.
Key-value store: COMPETITOR_REPORT
| Key | Content |
|---|---|
competitor | The name you entered |
sources_analyzed | Number of signals analyzed |
source_breakdown | Count per type: serp, content, social |
threat_level | High, Medium, Low (or Unknown) followed by a one-sentence reason |
executive_summary | A 2-3 sentence decision summary |
strengths | Up to 6 areas where the competitor is strong |
weaknesses | Up to 6 gaps that are opportunities for you |
content_gaps | Up to 8 topics missing at the competitor or in the market |
social_momentum | One sentence on engagement and growth direction |
action_plan | Up to 6 moves with priority, move, impact, effort, expected_result |
quick_wins | Low-effort, high or medium impact moves, each with reason and expected_result (the first move is not repeated here) |
first_move | The single most effective first move |
What to do with each part of the report
| Report part | Typical owner | Typical use |
|---|---|---|
first_move | Head of marketing or founder | This month's priority against this competitor |
quick_wins | Content or social team | Pages, posts and fixes that can ship within days |
action_plan | Marketing lead | Quarterly plan, sorted by priority |
content_gaps | SEO and content | Editorial calendar and keyword targets |
weaknesses | Sales and product marketing | Battle cards and positioning lines |
strengths | Product and leadership | Where not to compete head-on |
executive_summary | Management or client | One paragraph for a report or deck |
Who it is for
- SEO specialists and content strategists who track a few key competitors.
- Marketing managers who report on the competitive landscape every month or quarter.
- Founders and product marketers preparing positioning, pricing or launch plans.
- Agencies that deliver competitor audits to clients in the client's language.
- Sales enablement teams writing battle cards.
Use cases
SEO competitor analysis
Paste the keywords where the competitor outranks you, with both positions, plus notes on their ranking pages. Choose the SEO position and Content gaps focus. The report lists the gaps worth attacking and the moves to close them.
Content strategy
Add signals about the competitor's blog cadence, formats, topics and missing pages. The content_gaps list becomes a content backlog; the quick wins are usually pages you can publish fast.
Social media benchmarking
Add follower counts, posting frequency and engagement trends as social signals with a metric. social_momentum tells you whether they are gaining or losing attention, and the moves show where to act.
Pricing and positioning review
Choose the Pricing signals focus and add what you know about their plans, trial, discounts and pricing page. Weaknesses in how they present price are often the clearest positioning angle.
Agency competitor audits
Collect signals for a client's top competitor, run the report in the client's language, and put the executive summary, threat level and action table into the audit deck.
Battle cards for sales
Run one report per main competitor. strengths tells sales where not to fight, weaknesses where to lead, and first_move what to say first.
Worked example: a CRM startup against a market leader
A small CRM company wants to know where to compete with a larger rival.
- Collect 14 signals: six keyword rankings from a rank tracker, four observations about the rival's pricing and feature pages, and four social metrics.
- Run the report with the competitor's domain, the focus set to SEO position, content gaps and pricing signals, and the language set to English.
- Read
threat_level: High, because the rival ranks in the top three for most commercial keywords. - Read
weaknessesandcontent_gaps: no demo video, no page for "cheap crm", slow response to comments on social. - Act on
quick_wins: publish a page for the uncontested keyword and a short demo video. - Re-run next quarter with fresh rankings and compare the threat level and the gaps.
How it works
- Normalize. Each item becomes a signal with a type, title, content and optional metric. Text is read from
content,text,snippetordescription; the title fromtitleorquery; the metric frommetric,engagementorfollowers. - Infer missing types. Without a
type, a signal that mentions rankings, keywords, search or a link counts asserp; one that mentions followers, likes, shares, posts or engagement counts associal; anything else counts ascontent. - Analyze in batches. Signals are analyzed twelve at a time by a language model that must answer in a strict JSON format. If a response is cut off, the batch is retried once with more room.
- Merge. Batches are combined: the highest threat level wins, repeated strengths and gaps rank higher, moves are de-duplicated and renumbered.
- Report. The action table goes to the dataset; the full report goes to
COMPETITOR_REPORT.
If the signal list is empty or has no usable text, the run stops with a clear message and nothing is charged. A batch that fails to analyze is not charged either.
Input
| Field | Description |
|---|---|
competitorDomain | Competitor name, domain or social handle. Used in the report and as context. |
sources | The signals: plain strings or objects with type (serp, content, social), title, content and metric. |
dataPoints | Focus dimensions; see the value table below. Default: competitor comparison, content gaps, social signals. |
language | English, Türkçe, Deutsch, Español, Français. Default English. |
model | Advanced: the default is fast and economical; a stronger model is available for deeper synthesis. |
Focus values for the API
The Console shows readable names; the API expects the stored values:
| Console name | API value |
|---|---|
| Competitor comparison | rakip kıyası |
| Content gaps | içerik boşluğu |
| Social signals | sosyal sinyaller |
| SEO position | SEO konumu |
| Pricing signals | fiyatlandırma sinyali |
Example: structured signals
{"competitorDomain": "rivalcrm.com","sources": [{"type": "serp", "title": "best crm software", "content": "Rival ranks #3, we rank #9."},{"type": "serp", "title": "crm for small business", "content": "Rival ranks #1 with a comparison page."},{"type": "content", "title": "Pricing page", "content": "Transparent pricing, no demo video, free trial 14 days."},{"type": "social", "title": "Instagram", "content": "Weekly engagement declining.", "metric": "40K followers"}],"language": "English"}
Example: plain notes
{"competitorDomain": "Rival CRM","sources": ["Their blog publishes two articles a week; we publish one a month.","On Google, the keyword 'cheap crm' has no page from them.","Twitter posts get few likes; momentum looks weak."]}
Pricing
This Actor charges per event. Current prices are on the Pricing tab; at the time of writing:
| Event | When | Price |
|---|---|---|
actor-start | Once per run | $0.0001 |
source-analyzed | Per signal analyzed successfully | $0.02 |
report-generated | Once per report | $0.20 |
| Signals in one run | Calculation | Total (approx.) |
|---|---|---|
| 3 (the sample input) | $0.0001 + 3 x $0.02 + $0.20 | $0.26 |
| 10 | $0.0001 + 10 x $0.02 + $0.20 | $0.40 |
| 25 | $0.0001 + 25 x $0.02 + $0.20 | $0.70 |
| 50 | $0.0001 + 50 x $0.02 + $0.20 | $1.20 |
There is no subscription and no collection cost, because the Actor does not scrape. If you start the Actor without changing the input, the three sample signals are analyzed (about $0.26). An empty signal list is not charged.
Integrations
API
curl -X POST "https://api.apify.com/v2/acts/enezli~ai-competitor-intelligence/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"competitorDomain":"rivalcrm.com","sources":["Rival ranks #3 for best crm software, we rank #9."]}'
Python: from SERP results to a report
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")# Rows from any SERP or rank-tracking export; adjust the field names to your tool.rows = [{"keyword": "best crm software", "rival": 3, "us": 9},{"keyword": "crm for small business", "rival": 1, "us": 14},]sources = [{"type": "serp", "title": r["keyword"],"content": f"Rival ranks #{r['rival']}, we rank #{r['us']}."} for r in rows]run = client.actor("enezli/ai-competitor-intelligence").call(run_input={"competitorDomain": "rivalcrm.com", "sources": sources})report = client.key_value_store(run["defaultKeyValueStoreId"]).get_record("COMPETITOR_REPORT")["value"]print(report["threat_level"], report["first_move"])
Pairing with scrapers
Run a SERP, website or social media scraper from Apify Store first, then turn each result into one signal (title plus a sentence of content) and pass the list as sources. Nested results, such as a search page with many organic results, should be flattened to one signal per result.
n8n, Make, Zapier
Run Actor, read COMPETITOR_REPORT, post threat_level, first_move and executive_summary to Slack or email, and append the action table to a Google Sheet that tracks each competitor over time.
AI agents (MCP)
Available through the Apify MCP server, so an assistant can turn the notes it has gathered about a competitor into a structured plan.
Workflow recipes
Quarterly competitor review. Keep one task per main competitor. Each quarter, paste fresh rankings and observations and run all tasks. Compare threat levels and content gaps with the previous quarter.
Content backlog from gaps. Run the report with the Content gaps and SEO position focus. Move content_gaps and the quick wins into your editorial calendar.
Client audit in the client's language. Collect signals in English, set language to the client's language, and deliver the report without translating it by hand.
Launch readiness check. Before a launch, run reports on the two closest competitors with the Pricing signals focus. Use their weaknesses in your launch messaging.
Tips for better results
- Write signals as facts with numbers. "Rival ranks #3, we rank #9" is more useful than "they rank well".
- Mix the three types. SERP, content and social together give the synthesis something to connect.
- Add a metric to social signals (followers, engagement, growth) whenever you have one.
- Use 5-30 signals per report. Very few signals lead to "insufficient data" in several fields.
- One competitor per run. Mixing competitors blurs strengths and weaknesses.
- Pick the focus that matches your question; it steers what the model looks for.
Limits
- The Actor does not collect data from the web. The report is only as complete and current as the signals you provide.
- Impact, effort, threat level and expected results are model estimates from your signals, not measurements. Percentages are marked "est.".
- The action plan keeps at most six moves; strengths and weaknesses at most six each; content gaps at most eight.
- One competitor per run. For several competitors, run several times with the same settings.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| "No valid source signals found" | The list is empty, or items have no text in a supported field | Put the text in content (or text, snippet, description). Nothing was charged |
| Many fields say "insufficient data" | Too few signals, or signals of only one type | Add more signals and mix SERP, content and social |
| Signals counted under the wrong type | No type given and the text did not contain the usual keywords | Set type explicitly to serp, content or social |
| "No source could be analyzed" | The language model service did not respond | Run again later; failed batches are not charged |
| Report in the wrong language | language left at English | Choose the output language in the input |
FAQ
Does it scrape Google or social networks? No. It analyzes the signals you give it. You can pair it with any scraper or export from your SEO and social tools.
What counts as one signal?
One item in the sources list: a line of text or one object. Each successfully analyzed signal is one source-analyzed event.
Can I pass rows from a scraper directly?
Yes, when each row has text in content, text, snippet or description. Rows with nested lists should be flattened first.
Do I have to set the type? No. It is inferred from the text, but setting it gives more accurate breakdowns.
How is the threat level decided? The model rates threat as high, medium or low with a reason for each batch of signals; the report keeps the highest one.
Can it compare several competitors? Run one report per competitor with the same focus and compare the tables side by side.
Which languages are supported? Reports can be written in English, Turkish, German, Spanish or French. Signals can be in any language the model understands.
Why is the price per signal? The analysis work grows with the number of signals. Paying per signal keeps a small report cheap and lets you see the cost before you run: count your signals, multiply by $0.02 and add $0.20.
Can I schedule it? Yes. Save the input as a task and add a schedule. Because the Actor analyzes the signals in the input, update the signals (by hand or with an automation that runs before it) so each run reflects fresh data.
Is my data stored? Only in your own Apify storage. Signal text is sent to the language model provider solely to produce your report.
Am I charged when something fails? An empty input is not charged. A batch that fails to analyze is not charged; the report fee is charged only when a report is produced.
Trademarks
This Actor is not affiliated with, endorsed by, or connected to Google, Instagram or Twitter. All product names are trademarks of their respective owners.

