Social media managers, creators, and brand accounts that rely on retweets for reach but want an automated, hands-off cleanup after campaigns to keep profiles tidy and on-brand.
On a schedule, the workflow resolves your handle to a user ID, fetches recent tweets, filters retweets only, and safely unretweets them using batching and delays to respect rate limits. A dedicated CONFIG (Set Fields) node centralizes variables (e.g., target_username
, max_results
, batch_delay_minutes
) so you can adjust behavior without touching logic.
/2/users/by/username/{username}
– resolve handle → user ID/2/users/{id}/tweets?tweet.fields=created_at,referenced_tweets
– fetch recent tweets (identify retweets via referenced_tweets.type === "retweeted"
)/2/users/{id}/retweets/{tweet_id}
– unretweetGET /2/users/by/username/{username}
{
"data": { "id": "2244994945", "name": "Twitter Dev", "username": "TwitterDev" }
}
GET /2/users/{id}/tweets (truncated)
{
"data": [
{
"id": "1760000000000000000",
"text": "RT @someone: …",
"referenced_tweets": [{ "type": "retweeted", "id": "1759999999999999999" }],
"created_at": "2025-01-15T09:10:11.000Z"
}
],
"meta": { "result_count": 20 }
}
DELETE /2/users/{id}/retweets/{tweet_id}
{ "data": { "retweeted": false } }
Open CONFIG (Set Fields) and replace placeholders:
target_username = "your_handle"
max_results = 100
(per fetch)batch_delay_minutes = 2
(throttle between batches)Connect X/Twitter credentials in n8n (no keys hard-coded in HTTP nodes).
Run once with small values, verify logs, then enable the schedule.
Optional enhancements: add a dead-letter path (Error Trigger → Set → Sheets/Email/Slack) and a notification node (e.g., Slack) for execution feedback.