X (Twitter) Content Publisher – Post, Reply, Quote & Manage avatar

X (Twitter) Content Publisher – Post, Reply, Quote & Manage

Pricing

from $10.00 / 1,000 automations

Go to Apify Store
X (Twitter) Content Publisher – Post, Reply, Quote & Manage

X (Twitter) Content Publisher – Post, Reply, Quote & Manage

Publish and manage X (Twitter) content from your own account in bulk. Create posts, replies, and quotes with media, like, retweet, bookmark, follow, update your profile, manage lists, and post to communities. Safe pacing, action limits, and per-action results. Bring your auth token and proxy.

Pricing

from $10.00 / 1,000 automations

Rating

0.0

(0)

Developer

Chidubem Aneke

Chidubem Aneke

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

7 days ago

Last modified

Share

X Content Publisher

Publish and manage content on X (Twitter) from your own account — safely and in bulk. This Actor is the write counterpart to a read/scraping Actor: instead of collecting data, it performs actions such as posting, replying, liking, following, updating your profile, managing lists, and posting to communities.

You choose which actions to run with simple checkboxes, connect your account, and the Actor performs them and reports the result of each one.


What it can do

GroupActions
PostsCreate post, reply, quote, delete — each with optional media (up to 4 items)
EngagementLike / unlike, retweet / undo, bookmark / remove, follow / unfollow
ProfileUpdate name, bio, location, website; change avatar and banner
ListsCreate a list, add members, remove members
CommunitiesCreate post / reply / quote inside a community, join, leave

Each group is a checkbox — enable only what you need.


Safety first

Writing to a social account is destructive and irreversible, so this Actor is conservative by design:

  • One row per action. The dataset contains a flat record for every attempted action with its status (success, failed, or skipped), the resulting post ID/URL, and a clear message on failure.
  • One bad action never aborts the run. Errors are collected per action; the run keeps going and finishes with a summary.
  • Max actions cap. maxActions limits how many actions a single run will attempt — a guard against accidental bulk writes.
  • Pacing. delayBetweenActionsMs spaces out writes for account safety.
  • Reactive retries only. Rate limits and temporary server errors are retried with backoff. Content-creating actions are never retried after they are sent, to avoid duplicate posts.
  • Secrets are never logged. Your session token and proxy are redacted everywhere.

Requirements

Every action acts on your own account, so you connect your account at run time. Both of the following are required.

1. Your X auth token

The Actor logs in using your account's auth_token cookie.

Easiest way (Chrome extension):

  1. Install a cookie viewer such as Cookie-Editor or EditThisCookie from the Chrome Web Store.
  2. Open and log in to x.com.
  3. Click the extension icon, find the cookie named auth_token, and copy its value.
  4. Paste it into the X auth token field.

Manual way (no extension):

  1. Log in to x.com in Chrome.
  2. Press F12 → open the Application tab.
  3. In the left sidebar: Cookies → https://x.com.
  4. Find auth_token and copy its Value.

Keep this token private — anyone with it can act as your account. It's stored as a secret and never logged.

2. A sticky proxy

Provide a stable, user-owned proxy in four simple fields:

  • Proxy host — e.g. proxy.example.com
  • Proxy port — e.g. 8080
  • Proxy username
  • Proxy password

You get these from your proxy provider's dashboard. (Advanced users can instead paste a full host:port@user:pass string in the optional Full proxy string field.)

Use a sticky (non-rotating) proxy whose IP stays consistent. Rotating/residential proxy pools are never used for a logged-in account because switching IPs triggers security challenges. A stable IP keeps your session healthy.


Quick start

  1. Fill in your X auth token and proxy fields (see Requirements above).
  2. Enable a group (e.g. Posts) and fill the simple fields — just type your post text, no JSON needed:
{
"authToken": "your_auth_token",
"proxyHost": "proxy.example.com",
"proxyPort": "8080",
"proxyUsername": "myuser",
"proxyPassword": "mypass",
"enablePosts": true,
"postText": "Hello from my Actor 👋"
}
  1. Run it — each dataset row shows the outcome of an action, including the new post's ID and URL.
  2. Start with a small number of items and the default maxActions cap to stay safe.

How the form works: each feature has a master toggle (e.g. Enable Posts) and is split into small sections — Posts is broken into Create a post, Reply, Quote, and Delete; Lists into Create, Add members, Remove members; Communities into Post and Join / leave. Tick the toggle, then fill only the section(s) you want to use. Any field left blank is skipped, and you can combine several actions in one run.


Input reference

Global

FieldTypeDefaultDescription
authTokenstring (secret)Your auth_token cookie. Required.
proxyHost / proxyPortstring (secret)Your sticky proxy address and port. Required.
proxyUsername / proxyPasswordstring (secret)Your proxy credentials. Required.
userProxystring (secret)Advanced: full host:port@user:pass string (overrides the fields above).
maxActionsinteger50Hard cap per run (0 = unlimited).
delayBetweenActionsMsinteger1500Pause after each action.
stopOnAuthOrProxyErrorbooleantrueStop the run on a session/proxy failure.
includeRawbooleanfalseAttach the raw upstream response to each row.

Most groups offer simple form fields for the common case (one post, one reply, one list, etc.) plus an Advanced (JSON) option for doing many at once. Both work together — items from the advanced arrays are added on top of the simple fields.

Posts (enablePosts)

Simple fields:

  • New post — postText, postMediaUrls?, postReplyOptionMode?, postDisableLinkPreview?
  • Reply — replyToTweet (ID or URL), replyText, replyMediaUrls?
  • Quote — quoteTweet (ID or URL), quoteUsername?, quoteText, quoteMediaUrls?
  • deleteTweetIds, deleteTweetUrls — lists

Advanced (bulk, JSON):

  • createPosts[{ text, mediaUrls?, replyOptionMode?, disableLinkPreview? }]
  • replies[{ tweetId | tweetUrl, text, mediaUrls? }]
  • quotes[{ tweetId | tweetUrl, quotedUsername?, text, mediaUrls? }]

Engagement (enableEngagement)

  • like / unlike / retweet / unretweet / bookmark / unbookmark — each takes *TweetIds and *TweetUrls
  • follow / unfollow — each takes *UserIds and *Usernames (@handles are resolved automatically)

Profile (enableProfile)

  • profileName, profileBio, profileLocation, profileWebsite, avatarUrl, bannerUrl — only non-empty fields are changed.

Lists (enableLists)

Simple fields:

  • New list — newListName, newListDescription?, newListPrivate?
  • Add members — addMembersListId + addMemberUsernames (@handles)
  • Remove members — removeMembersListId + removeMemberUsernames (@handles)

Advanced (bulk, JSON):

  • createLists[{ name, description?, isPrivate? }]
  • addListMembers / removeListMembers[{ listId, userId | username }]

Communities (enableCommunities)

Simple fields:

  • Community post — communityId, communityPostText, communityPostMediaUrls?
  • joinCommunityIds, leaveCommunityIds — lists

Advanced (bulk, JSON):

  • communityPosts[{ communityId, text, mediaUrls? }]
  • communityReplies[{ communityId, tweetId | tweetUrl, text, mediaUrls? }]
  • communityQuotes[{ communityId, tweetId | tweetUrl, quotedUsername?, text }]

Media

Provide media per item via:

  • mediaUrls: a list of public image/video/GIF URLs (simplest), or
  • media: an array where each item uses exactly one source:
    • { "url": "https://…" } — fetched and uploaded for you,
    • { "data": "<base64>", "type": "image/png" } — base64 upload with a MIME type, or
    • { "media_id": "1971008286821380096" } — a media id you already uploaded with the same account (advanced).

Up to 4 media items per post (or 1 video).


Output

Each attempted action is one dataset row:

{
"actionType": "create_post",
"status": "success",
"apiAction": "create_tweet",
"inputRef": "Hello from my Actor 👋",
"targetId": null,
"resultId": "1799999999999999999",
"resultUrl": "https://x.com/you/status/1799999999999999999",
"plannedRequest": { "endpoint": "create-post", "text": "Hello from my Actor 👋" },
"message": null,
"timestamp": "2026-07-06T12:00:00.000Z"
}

Field notes:

  • status — one of success, failed, or skipped.
  • apiAction — the platform action that was performed (e.g. create_tweet, follow, add_to_list).
  • targetId — the id your input pointed at (tweet/user/list/community).
  • resultId — the primary id created or affected: a new tweet id for posts/replies/quotes, a new list id for list creation, your account id for profile updates, or the affected id for engagement.
  • resultUrl — the canonical x.com link when the action created a post.
  • plannedRequest — a secret-free record of what was sent.

A per-run summary (enabled groups, counts by status and action type, and non-fatal errors) is written to the key-value store record OUTPUT.


📬 Contact & custom projects

Need something built? I take on custom work, including:

  • Web scraping & data extraction — Apify Actors, crawlers, and automation for any site or API.
  • Web apps — dashboards, tools, and full-stack applications of any kind.
  • Automation & integrations — bots, pipelines, and workflow automation.

Reach out — happy to discuss your project: