monitoring-twitter-for-competitor-job-posts — Claude Code skill for X
Tracks competitor hiring tweets on X and turns them into growth signals: who is hiring, for what role, and when.
npx skills add apidojo-io/apidojo-skills --skill monitoring-twitter-for-competitor-job-posts -a claude-codeWhat monitoring-twitter-for-competitor-job-posts does
The skill runs the apidojo~tweet-scraper actor on Apify against queries like [COMPETITOR] hiring or [COMPETITOR] job opening. You get back a table with the company handle, the role, the department, the posting date, urgency cues and a growth score. Handy when you want to see which departments a competitor is expanding right now.
Five steps sit behind it: define parameters, run the actor, classify the results, score them, deliver the output. Classification is blunt — more than 5 roles a month reads as aggressive growth, 2–5 as steady, 1–2 as one-off postings. The score combines roles posted in 30 days, department weight and urgency language. Engineering roles count for more.
You need APIFY_TOKEN in your environment or in a .env file before anything runs. No token, no actor — check that first. Launch it with scripts/run_actor.js and save to CSV or JSON, through the Apify MCP server, or with a plain curl call to the REST API. Under 20 results, the skill tells you to widen the search terms and drop secondary filters.
What it helps with
- pull a competitor's open roles out of its tweets
- see which departments are growing versus backfilling
- separate strategic hiring from routine replacement
- export found postings to CSV for a report
- cut noise with a minimum relevance score
Example prompts for the agent
- scan a competitor's tweets for job postings from the last month
- collect hiring posts from three companies and group them by department
- export the postings to CSV with growth scores
How to install monitoring-twitter-for-competitor-job-posts
1Skills CLI (Vercel)
npx skills add apidojo-io/apidojo-skills --skill monitoring-twitter-for-competitor-job-posts -a claude-code2Manually: put the files in place
~/.claude/skills/monitoring-twitter-for-competitor-job-posts/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/monitoring-twitter-for-competitor-job-posts/
1Skills CLI (Vercel)
npx skills add apidojo-io/apidojo-skills --skill monitoring-twitter-for-competitor-job-posts -a codex2Manually: put the files in place
.agents/skills/monitoring-twitter-for-competitor-job-posts/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add apidojo-io/apidojo-skills --skill monitoring-twitter-for-competitor-job-posts -a cursor2Manually: put the files in place
.cursor/skills/monitoring-twitter-for-competitor-job-posts/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install apidojo-io/apidojo-skills monitoring-twitter-for-competitor-job-posts2Manually: put the files in place
.github/skills/monitoring-twitter-for-competitor-job-posts/SKILL.md1Skills CLI (Vercel)
npx skills add apidojo-io/apidojo-skills --skill monitoring-twitter-for-competitor-job-posts -a gemini-cli2Platform CLI
gemini skills install https://github.com/apidojo-io/apidojo-skills --path skills/intent/monitoring-twitter-for-competitor-job-postsManually: put the files in place
.devin/skills/monitoring-twitter-for-competitor-job-posts/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add apidojo-io/apidojo-skills --skill monitoring-twitter-for-competitor-job-posts -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about monitoring-twitter-for-competitor-job-posts
How do I install monitoring-twitter-for-competitor-job-posts in Claude?
Run npx skills add apidojo-io/apidojo-skills --skill monitoring-twitter-for-competitor-job-posts -a claude-code. The skill then lands at ~/.claude/skills/monitoring-twitter-for-competitor-job-posts/SKILL.md.
What does monitoring-twitter-for-competitor-job-posts do?
It searches X for competitor hiring posts via the apidojo~tweet-scraper actor and returns the company handle, role, department, posting date, urgency signals and a growth score.
What do I need for the skill to work?
An APIFY_TOKEN environment variable, set in your shell or in a .env file. Optionally install the Apify MCP server and run it through the apify:run-actor tool.
Source text
SKILL.md · Apache-2.0
---
name: monitoring-twitter-for-competitor-job-posts
description: >
Monitors Twitter for competitor hiring announcements to track growth signals using apidojo's Tweet scraper. Triggers when the user asks to: monitor competitor job postings on Twitter, track hiring signals from competitor companies on X, find out what roles competitors are hiring for on Twitter, analyze competitor team growth from their Twitter activity, monitor startup hiring signals for competitive intelligence, track which departments competitors are growing via their Twitter, or discover competitor expansion strategies from job post tweets.
Returns company handle, role being posted, department, posting date, urgency signals, and growth pattern.
Ideal for competitive intelligence teams, recruiters targeting competitor employees, and investors tracking company growth.
license: Apache-2.0
metadata:
author: apidojo
version: "1.0"
apify-actor: apidojo/tweet-scraper
---
# Monitoring Twitter For Competitor Job Posts
Executes monitoring twitter for competitor job posts using apidojo scrapers. Part of the apidojo intelligence skills library.
## 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: Define parameters
- [ ] Step 2: Run tweet-scraper
- [ ] Step 3: Filter and classify results
- [ ] Step 4: Score by quality and relevance
- [ ] Step 5: Deliver output
```
### 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": ["[COMPETITOR] hiring", "[COMPETITOR] join our team", "[COMPETITOR] job opening"],
"maxItems": 100
}
```
**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": ["[COMPETITOR] hiring", "[COMPETITOR] join our team", "[COMPETITOR] job opening"], "maxItems": 100}'
```
Wait for `SUCCEEDED`. Fetch dataset:
```bash
curl "https://api.apify.com/v2/actor-runs/$RUN_ID/dataset/items?token=$APIFY_TOKEN"
```
### Step 3: Classify Results
```
classification: AGGRESSIVE_GROWTH (> 5 roles/month) | STEADY_GROWTH (2-5 roles/month) | OPPORTUNISTIC (1-2 roles) | REPLACEMENT_ONLY (role title identical to recent departure signal)
```
### Step 4: Score Each Result
```
score = growth_signal_score = (roles_posted_in_30_days / 5, max 1) * 0.50 + (engineering_role ? 1.2 : 1) * department_weight * 0.30 + (urgency_language ? 1 : 0.5) * 0.20
```
### Step 5: Edge Cases
- **Competitor may post jobs across many channels but only announce key roles on Twitter — Twitter hiring posts often signal strategic priorities, not routine backfills**
Additional fallbacks:
- **< 20 results**: Broaden search terms; remove secondary filters
- **No results**: Verify the search terms are correct; try alternate phrasings
- **Data quality issues**: Remove entries with missing key fields; note count in output
## Output Format
```
# Monitoring Twitter For Competitor Job Posts
Results: [N] | Date: [DATE]
| # | [Key Field] | [Metric 1] | [Metric 2] | [Classification] | [Score] |
|---|------------|-----------|-----------|-----------------|---------|
| 1 | [value] | [value] | [value] | [type] | [0.XX] |
## Summary
Top result: [description]
Key finding: [insight]
```
## Troubleshooting
**Too few results:** Broaden the primary search term; remove restrictive filters.
**Low quality results:** Apply minimum score threshold (≥ 0.50) to filter noise.
**Actor fails to run:** Verify API key; check actor status at apify.com/apidojo.
© apidojo · Apache-2.0 · apidojo-io/apidojo-skills