Skip to main content
skill CX Codex

scraping-tweets-by-keyword — Claude Code skill: how to install

Gathers tweets matching keywords, phrases, or hashtags via Apify. Delivers structured datasets with engagement metrics and author details.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add apidojo-io/apidojo-skills --skill scraping-tweets-by-keyword -a claude-code
Open on GitHub

What scraping-tweets-by-keyword does

The skill manages queries against Twitter search using the apidojo/tweet-scraper Apify actor. It pulls 15 fields per record, capturing tweet text, author handles, like and retweet counters, timestamps, and direct URLs.

Execution works through scripts/run_actor.js saving to CSV or JSON, or via the apify:run-actor tool when using the Apify MCP server. Available parameters handle language codes, user verification, coordinate bounds, and minimum reply counts.

Without an APIFY_TOKEN environment variable set, runs fail immediately. Large extractions need a ceiling of maxItems: 500 per run to avoid network timeouts.

What it helps with

  • export Twitter search results to CSV or JSON files
  • filter posts by engagement counts, author, or language
  • track mentions and hashtags with boolean search syntax
  • fetch geotagged tweets within a defined radius

Example prompts for the agent

  • Fetch the latest 100 tweets containing #AI in English and export to CSV
  • Pull all tweets from @NASA posted this month with at least 50 retweets
  • Search for tweets mentioning machine learning from verified accounts

How to install scraping-tweets-by-keyword

1Skills CLI (Vercel)

npx skills add apidojo-io/apidojo-skills --skill scraping-tweets-by-keyword -a claude-code

2Manually: put the files in place

~/.claude/skills/scraping-tweets-by-keyword/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/scraping-tweets-by-keyword/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about scraping-tweets-by-keyword

How do I install scraping-tweets-by-keyword in Claude Code?

Run npx skills add apidojo-io/apidojo-skills --skill scraping-tweets-by-keyword -a claude-code. The file will be placed in ~/.claude/skills/scraping-tweets-by-keyword/SKILL.md.

What does scraping-tweets-by-keyword do?

It triggers the Apify apidojo/tweet-scraper actor to collect search matches and returns tweet records with complete engagement statistics.

What credentials are required?

You need an Apify API token configured as the APIFY_TOKEN environment variable or inside your local .env file.

Source text

SKILL.md · Apache-2.0
---
name: scraping-tweets-by-keyword
description: >
  Scrapes tweets matching any keyword, hashtag, phrase, or boolean query using apidojo's
  Twitter Search scraper on Apify. Triggers when the user asks to: scrape tweets about
  a topic, fetch tweets containing a keyword or hashtag, export Twitter search results to
  a dataset, get all tweets mentioning a phrase, pull recent tweets for a search term,
  or collect tweet data for analysis or research. Returns tweet text, author, likes,
  retweets, replies, timestamp, and tweet URL per result.
  Ideal for researchers, data analysts, journalists, and social listening teams.
license: Apache-2.0
metadata:
  author: apidojo
  version: "1.0"
  apify-actor: apidojo/tweet-scraper
---

# Scraping Tweets by Keyword

Raw tweet collection for any keyword, hashtag, or boolean search query. No assumed use case — returns the full tweet dataset for downstream analysis.

## Prerequisites

- `APIFY_TOKEN` environment variable set
- Optional: Apify MCP server installed

## Inputs

| Parameter | Type | Required | Default | Notes |
|-----------|------|----------|---------|-------|
| `searchTerms` | array | ✅ | `[]` | Twitter advanced search queries (e.g. `["#AI lang:en", "from:NASA"]`) |
| `sort` | string | Optional | `Top` | Sort order: `Latest`, `Top`, or `Latest+Top` |
| `tweetLanguage` | string | Optional | — | ISO 639-1 language code (e.g. `en`) |
| `maxItems` | number | Optional | Unlimited | Maximum tweets to return |
| `onlyVerifiedUsers` | boolean | Optional | `false` | Only tweets from verified users |
| `onlyTwitterBlue` | boolean | Optional | `false` | Only Twitter Blue subscribers |
| `onlyImage` | boolean | Optional | `false` | Only tweets with images |
| `onlyVideo` | boolean | Optional | `false` | Only tweets with videos |
| `onlyQuote` | boolean | Optional | `false` | Only quote tweets |
| `author` | string | Optional | — | Filter to a specific author handle |
| `inReplyTo` | string | Optional | — | Tweets replying to a specific handle |
| `mentioning` | string | Optional | — | Tweets mentioning a specific handle |
| `geotaggedNear` | string | Optional | — | Tweets near a location |
| `withinRadius` | string | Optional | — | Radius around geotaggedNear |
| `geocode` | string | Optional | — | Lat/lng + radius string |
| `placeObjectId` | string | Optional | — | Tweets tagged with a place |
| `minimumRetweets` | number | Optional | — | Minimum retweet count |
| `minimumFavorites` | number | Optional | — | Minimum like count |
| `minimumReplies` | number | Optional | — | Minimum reply count |
| `start` | string | Optional | — | Tweets after this date (YYYY-MM-DD) |
| `end` | string | Optional | — | Tweets before this date (YYYY-MM-DD) |
| `includeSearchTerms` | boolean | Optional | `false` | Add the matched search term to each tweet |
| `customMapFunction` | string | Optional | — | JavaScript function to transform each output object |

## Workflow

```
Progress:
- [ ] Step 1: Build search query string
- [ ] Step 2: Run tweet-scraper
- [ ] Step 3: Poll for SUCCEEDED
- [ ] Step 4: Fetch and deliver dataset
```

### Step 1: Build Search Query

- Hashtag search → `#keyword`
- Exact phrase → `"exact phrase"`
- Boolean → `word1 AND word2 -exclude`
- From account → `from:username`
- Mention → `@username`

### Step 2: Run the Actor


**Recommended — run_actor.js (handles waiting, output, and file saving automatically):**
```bash
# Quick answer (prints table to chat)
node scripts/run_actor.js \
  --actor "apidojo~tweet-scraper" \
  --input '{"param": "value"}'

# Save as CSV
node scripts/run_actor.js \
  --actor "apidojo~tweet-scraper" \
  --input '{"param": "value"}' \
  --output YYYY-MM-DD_results.csv --format csv

# Save as JSON
node scripts/run_actor.js \
  --actor "apidojo~tweet-scraper" \
  --input '{"param": "value"}' \
  --output YYYY-MM-DD_results.json --format json
```
> `APIFY_TOKEN` must be set in environment or `.env` file.

**If Apify MCP is available:**
```
Tool: apify:run-actor
Actor: "apidojo~tweet-scraper"
Input:
{
  "searchTerms": ["<query>"],
  "maxItems": 200,
  "since": "<YYYY-MM-DD>",
  "lang": "<lang_code>"
}
```

**REST API fallback:**
```bash
curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~tweet-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["<query>"], "maxItems": 200}'
```

Save `id` as `RUN_ID`. Poll until `status = SUCCEEDED`:
```bash
curl "https://api.apify.com/v2/actor-runs/$RUN_ID?token=$APIFY_TOKEN" | grep '"status"'
```

Fetch results:
```bash
curl "https://api.apify.com/v2/actor-runs/$RUN_ID/dataset/items?token=$APIFY_TOKEN&format=json"
```

### Step 3: Handle Edge Cases

- **0 results**: Query may be too narrow, misspelled, or language-filtered. Broaden term, remove language filter, extend date range.
- **< 20 results**: Try removing `since`/`until` constraints. Some low-volume terms have sparse data.
- **Duplicate tweet IDs**: Deduplicate by `id` field before delivering.
- **Suspended/deleted accounts**: Tweets from suspended accounts return with empty author fields — flag these rows.

## Output Format

```
# Tweet Dataset: "<query>"
Total collected: N | Date range: SINCE – UNTIL | Language: LANG

| Tweet ID | Author | Text (truncated) | Likes | Retweets | Replies | Timestamp |
|----------|--------|-----------------|-------|----------|---------|-----------|
| ...      | ...    | ...             | ...   | ...      | ...     | ...       |

Full dataset: N rows × 15 fields
Available fields: id, text, author_id, author_username, likeCount, retweetCount,
replyCount, quoteCount, lang, createdAt, tweetUrl, media, isRetweet, isQuote, source
```

## Troubleshooting

**Empty results for a valid hashtag:** Twitter API indexing lag — try again after 15 minutes.
**Rate limit error:** Reduce `maxItems` to 100 and retry.
**Timeout on large requests:** Set `maxItems: 500` max per run; chain multiple runs with date ranges for larger datasets.

© apidojo · Apache-2.0 · apidojo-io/apidojo-skills

Similar skills

All skills for Browser and scraping →

From the same set96

finding-software-engineers-on-twitter A skill that hunts for engineers and developers on Twitter/X by tech stack and open-to-work signals. Built for technical recruiters and hiring managers. CX Codex +1 752installs scraping-instagram-comments Collects Instagram post comments through Apify, including text, engagement counts, timestamps, and commenter details. Useful for audience reaction analysis. CX Codex +1 750installs finding-youtube-sponsorship-candidates Finds YouTube channels for brand sponsorships and scores them using audience activity, niche fit, and sponsor history. Use it to build a ranked outreach list. CX Codex +1 749installs finding-gaming-content-creators Discovers gaming creators on TikTok and YouTube via Apify scrapers. Built for compiling targeted creator outreach lists for sponsorship campaigns. CX Codex +1 745installs scraping-twitter-list-members Extracts member profiles and stats from public Twitter/X lists via Apify. Useful for audience research and competitor tracking. CX Codex +1 742installs finding-freelancers-by-skill-on-twitter Finds freelancers and independent contractors on Twitter by skill, profile details, and signs they are open to work. Useful when a project needs outside specialists. CX Codex +1 740installs monitoring-instagram-hashtag-trends Pulls Instagram posts per hashtag and works out which tags actually earn engagement. Useful when you need a hashtag set for a post or a brand comparison. CX Codex +1 740installs finding-real-estate-professionals-on-twitter Finds real estate agents, brokers, investors, and other property professionals on Twitter/X through Apify. Useful for building targeted profile lists. CX Codex +1 739installs

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor