# Analyzing Competitor Twitter Profile Content

> Extracts and analyzes tweet history from competitor or brand Twitter profiles using apidojo's Twitter Profile Scraper on Apify. Triggers when the user asks to: get all tweets from a competitor's Twitter account, analyze what a company posts on Twitter, audit a brand's tweet history, track what topics a competitor covers on X, compare Twitter content strategy between brands, extract posts from a company's Twitter timeline, or monitor a competitor's messaging and announcements on Twitter. Returns tweet text, engagement metrics (likes, retweets, replies, views), and author data. Ideal for competitive intelligence teams, PR analysts, and brand strategists.

- Skill: `apidojo-io/analyzing-competitor-twitter-profile-content` (Agent Skill)
- Install (CLI): `npx skillmds@latest add apidojo-io/analyzing-competitor-twitter-profile-content`
- Raw SKILL.md: https://api.skillmd.com/api/skills/apidojo-io/analyzing-competitor-twitter-profile-content/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Security
- License: Apache-2.0
- Author: apidojo-io (https://skillmd.com/u/apidojo-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/apidojo-io/analyzing-competitor-twitter-profile-content

---


# Analyzing Competitor Twitter Profile Content

---

## Inputs

| Parameter | Type | Required | Default | Notes |
|-----------|------|----------|---------|-------|
| `startUrls` | array | Optional | `[]` | Twitter profile URLs (x.com or twitter.com formats) |
| `twitterHandles` | array | Optional | `[]` | Twitter usernames (without @) |
| `start` | string | Optional | — | Tweets after this date (YYYY-MM-DD or YYYY-MM-DD_HH:MM:SS_UTC) |
| `end` | string | Optional | — | Tweets before this date (YYYY-MM-DD or YYYY-MM-DD_HH:MM:SS_UTC) |
| `includeNativeRetweets` | boolean | Optional | `false` | Include native retweets in results |
| `onlyImages` | boolean | Optional | `false` | Only tweets containing images |
| `getReplies` | boolean | Optional | `false` | Include tweet replies |
| `minReplyCount` | number | Optional | — | Minimum reply count threshold |
| `getAboutData` | boolean | Optional | `false` | Fetch full profile about data |
| `maxItems` | number | Optional | Unlimited | Maximum tweets to return |
| `customMapFunction` | string | Optional | — | JavaScript function to transform each output object |

## How to Run

### Using run_actor.js (recommended)

```bash
# Quick answer (table)
node scripts/run_actor.js --actor "apidojo~twitter-profile-scraper" --input '{"twitterHandles": ["competitor_handle"], "maxItems": 100}'

# Save as CSV
node scripts/run_actor.js --actor "apidojo~twitter-profile-scraper" --input '{"twitterHandles": ["competitor_handle"], "maxItems": 100}' --output results.csv --format csv

# Save as JSON
node scripts/run_actor.js --actor "apidojo~twitter-profile-scraper" --input '{"twitterHandles": ["competitor_handle"], "maxItems": 100}' --output results.json --format json
```

### REST API fallback

```bash
curl -X POST "https://api.apify.com/v2/acts/apidojo~twitter-profile-scraper/runs" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"twitterHandles": ["competitor_handle"], "maxItems": 100}'
```

If Apify MCP is available:
Use the Apify MCP `call_actor` tool with actor `apidojo~twitter-profile-scraper` and the input above.

---

## Scoring & Ranking

Score each tweet for competitive intelligence value:
- `engagement_total = likeCount + retweetCount + replyCount + quoteCount` → normalized 0-1 (cap at 10K), weight 0.50
- `viewCount` → normalized 0-1 (cap at 500K), weight 0.30
- `has_media` (contains image or video) → 0 or 1, weight 0.20

```python
score = 0.50 * min(engagement_total / 10000, 1.0) + 0.30 * min(viewCount / 500000, 1.0) + 0.20 * int(has_media)
```

---

## Classification

| Score | Tier | Label |
|-------|------|-------|
| ≥ 0.70 | A | HIGH_IMPACT_TWEET |
| 0.40–0.69 | B | NOTABLE_TWEET |
| < 0.40 | C | LOW_ENGAGEMENT |

---

## Edge Cases

- **Private account**: Returns 0 tweets. Check if competitor locked their account.
- **Minimum 40 tweets**: First 40 are included at base pricing. For more, cost is $0.0004/tweet.
- **Retweets included**: Results include RTs. Filter by checking if text starts with "RT @".
- **Date range + few results**: Some accounts tweet rarely — widen date range or remove filter.
- **Multiple competitors**: Run for each handle separately and combine datasets.

