Reddit Posting V2 — Text/Link/Image/Gallery/Video/Poll/Cross
Pricing
$1.99 / 1,000 results
Reddit Posting V2 — Text/Link/Image/Gallery/Video/Poll/Cross
Create any Reddit post type from your saved account: text, link, image (URL), gallery (2–20 URLs), video, poll, crosspost. 7 endpoints. Reddit account required — use Token V2 + matching proxy or a saved account from the Reddit Vault actor.
Pricing
$1.99 / 1,000 results
Rating
0.0
(0)
Developer
Red Crawler
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Reddit Posting V2
Create any kind of Reddit post — text, link, image, gallery, video, poll, or crosspost — from your account. One actor, one input form, seven post types. Pick the type, fill the matching section, supply credentials (saved by name in the Reddit Vault actor, or pasted inline), and the actor publishes the post on your behalf.
Every endpoint here is authenticated — you must supply a Reddit Token V2 + the matching proxy that minted it (or pull both from the Reddit Vault by name).
Pick an endpoint, fill the matching section, hit Start.
What you can post
For every post type the subreddit field accepts a name in any of these formats:
- raw name —
pics - prefixed —
r/pics - subreddit URL —
https://www.reddit.com/r/pics - old-Reddit URL —
https://old.reddit.com/r/pics
1. Text post — markdown self-post
Most subs allow text posts. The body supports full Reddit markdown (**bold**, *italic*, > quote, [link](url), - bullet, code fences).
Inputs:
- Subreddit (required)
- Title (required, max 300 chars)
- Body (optional markdown)
- Flair ID + Flair text (optional)
- NSFW / Spoiler (optional booleans)
- Optional
text_brand_affiliateboolean — set totrueto mark the post as a brand affiliate disclosure (Reddit-required for sponsored content).
Use it when: AskReddit-style posts, discussion starters, announcements, written content of any kind.
Example
Input
{"endpoint": "text","text_subreddit": "test","text_title": "Hello from RedCrawler Posting V2 text post","text_body": "**Markdown** is supported — *italic*, [links](https://example.com), `code`.","credentialSource": "vault","accountName": "motor_tip8865"}
Output (one dataset record)
{"endpoint": "text","success": true,"id": "t3_1tc6jwx","title": "Hello from RedCrawler Posting V2 text post","isNsfw": false,"createdAt": "2026-05-13T17:27:32.079000+0000","url": "https://www.reddit.com/r/test/comments/1tc6jwx/hello_from_redcrawler_posting_v2_text_post/","authorInfo": { "id": "t2_29onm7dc32" },"subreddit": { "id": "t5_2qh23", "name": "test" },"ok": true,"rate_limit_used": 8,"rate_limit_remaining": 1792,"rate_limit_reset_at": "2026-05-13T17:30:00Z"}
2. Link post — share an outbound URL
Share an external URL with an optional caption.
Inputs:
- Subreddit (required)
- Title (required, max 300 chars)
- Link URL (required) — the URL you want to share
- Body (optional caption)
- Flair / NSFW / Spoiler (optional)
- Optional
link_brand_affiliateboolean — set totrueto mark the post as a brand affiliate disclosure (Reddit-required for sponsored content).
Use it when: sharing news articles, blog posts, external resources, or any non-Reddit URL.
Example
Input
{"endpoint": "link","link_subreddit": "test","link_title": "RedCrawler Posting V2 — link post sample","link_url": "https://example.com","link_body": "Discovered this last week — short read.","credentialSource": "vault","accountName": "motor_tip8865"}
Output (one dataset record)
{"endpoint": "link","success": true,"id": "t3_1tc6k18","title": "RedCrawler Posting V2 — link post sample","isNsfw": false,"createdAt": "2026-05-13T17:27:39.035000+0000","url": "https://example.com","authorInfo": { "id": "t2_29onm7dc32" },"subreddit": { "id": "t5_2qh23", "name": "test" },"ok": true,"rate_limit_used": 9,"rate_limit_remaining": 1791,"rate_limit_reset_at": "2026-05-13T17:30:00Z"}
3. Image post — single image upload
Upload a JPG / PNG / GIF / WebP from a public URL. The actor downloads the image and uploads it to Reddit's CDN on your behalf.
Inputs:
- Subreddit (required)
- Title (required, max 300 chars)
- Image URL (required) — publicly reachable image URL
- Body (optional caption)
- Flair / NSFW / Spoiler (optional)
- Optional
image_brand_affiliateboolean — set totrueto mark the post as a brand affiliate disclosure (Reddit-required for sponsored content).
Use it when: sharing a photo, screenshot, meme, infographic — anything that's a single image.
Example
Input
{"endpoint": "image","image_subreddit": "test","image_title": "RedCrawler Posting V2 — image post sample","image_url": "https://i.imgur.com/KAeuBNn.jpeg","image_body": "Single-image upload via RedCrawler.","credentialSource": "vault","accountName": "motor_tip8865"}
Output (one dataset record — Reddit re-hosts the image on its own CDN; url becomes i.redd.it)
{"endpoint": "image","success": true,"id": "t3_1tc6ixi","title": "RedCrawler Posting V2 — image post sample","isNsfw": false,"createdAt": "2026-05-13T17:26:37.744000+0000","url": "https://i.redd.it/n4lbhvw2wx0h1","authorInfo": { "id": "t2_29onm7dc32" },"subreddit": { "id": "t5_2qh23", "name": "test" },"ok": true,"rate_limit_used": 4,"rate_limit_remaining": 1796,"rate_limit_reset_at": "2026-05-13T17:30:00Z"}
4. Gallery post — 2–20 images
Upload multiple images as a single gallery post. Each image can have its own caption.
Inputs:
- Subreddit (required)
- Title (required, max 300 chars)
- Image URLs (required) — 2–20 publicly reachable image URLs, one per row (or JSON array)
- Captions (optional) — one per image, aligned by index
- Body (optional caption shown above the gallery)
- Flair / NSFW / Spoiler (optional)
- Optional
gallery_brand_affiliateboolean — set totrueto mark the post as a brand affiliate disclosure (Reddit-required for sponsored content).
Use it when: photo dumps, side-by-side comparisons, multi-image stories, before/after sequences.
Example
Input (3 images, aligned captions)
{"endpoint": "gallery","gallery_subreddit": "test","gallery_title": "RedCrawler Posting V2 — three-shot gallery sample","gallery_image_urls": ["https://i.imgur.com/B9omOe6.jpeg","https://i.imgur.com/GGhH70K.jpeg","https://i.imgur.com/TPMezMZ.jpeg"],"gallery_captions": ["Frame one", "Frame two", "Frame three"],"gallery_body": "Three-image gallery via RedCrawler.","credentialSource": "vault","accountName": "motor_tip8865"}
Output (one dataset record — url is the Reddit gallery URL)
{"endpoint": "gallery","success": true,"id": "t3_1tc6j65","title": "RedCrawler Posting V2 — three-shot gallery sample","isNsfw": false,"createdAt": "2026-05-13T17:26:51.773000+0000","url": "https://www.reddit.com/gallery/1tc6j65","authorInfo": { "id": "t2_29onm7dc32" },"subreddit": { "id": "t5_2qh23", "name": "test" },"ok": true,"rate_limit_used": 5,"rate_limit_remaining": 1795,"rate_limit_reset_at": "2026-05-13T17:30:00Z"}
5. Video post — single video upload
Upload an MP4 from a public URL. Reddit transcodes the file before the post becomes visible — expect 30–90 seconds end-to-end.
Inputs:
- Subreddit (required)
- Title (required, max 300 chars)
- Video URL (required) — publicly reachable
.mp4URL - Poster URL (optional) — thumbnail. If omitted, a frame is auto-extracted from the video
- Body (optional caption)
- Flair / NSFW / Spoiler (optional)
- Optional
video_brand_affiliateboolean — set totrueto mark the post as a brand affiliate disclosure (Reddit-required for sponsored content).
Use it when: sharing video clips, screen recordings, montages, anything that's a single video file.
Example
Input
{"endpoint": "video","video_subreddit": "test","video_title": "RedCrawler Posting V2 — video sample","video_url": "https://i.imgur.com/BuzoHUZ.mp4","video_body": "Short clip — uploaded via RedCrawler.","credentialSource": "vault","accountName": "motor_tip8865"}
Output (one dataset record — Reddit re-hosts the video on v.redd.it)
{"endpoint": "video","success": true,"id": "t3_1tc6jgu","title": "RedCrawler Posting V2 — video sample","isNsfw": false,"createdAt": "2026-05-13T17:27:08.562000+0000","url": "https://v.redd.it/o7xpwux5wx0h1","authorInfo": { "id": "t2_29onm7dc32" },"subreddit": { "id": "t5_2qh23", "name": "test" },"ok": true,"rate_limit_used": 6,"rate_limit_remaining": 1794,"rate_limit_reset_at": "2026-05-13T17:30:00Z"}
6. Poll post — 2+ options, 1–7 day duration
Create a poll with multiple options.
Inputs:
- Subreddit (required) — must allow polls
- Title (required, max 300 chars) — the poll question
- Poll options (required) — 2 or more options, one per row (or JSON array)
- Poll duration (required, default
3) — 1 to 7 days - Body (optional description shown above the poll)
- Flair / NSFW / Spoiler (optional)
- Optional
poll_brand_affiliateboolean — set totrueto mark the post as a brand affiliate disclosure (Reddit-required for sponsored content).
Use it when: asking the community a question, gathering opinions, A/B testing copy, picking a name for something.
Example
Input (4 options, 5-day duration)
{"endpoint": "poll","poll_subreddit": "test","poll_title": "Which language should I learn next?","poll_options": ["Rust", "Go", "Zig", "TypeScript"],"poll_duration": 5,"poll_body": "Currently writing Python full-time.","credentialSource": "vault","accountName": "motor_tip8865"}
Output (one dataset record)
{"endpoint": "poll","success": true,"id": "t3_1tc6ncq","title": "Which language should I learn next?","isNsfw": false,"createdAt": "2026-05-13T17:30:40.433000+0000","url": "https://www.reddit.com/r/test/comments/1tc6ncq/which_language_should_i_learn_next/","authorInfo": { "id": "t2_29onm7dc32" },"subreddit": { "id": "t5_2qh23", "name": "test" },"ok": true,"rate_limit_used": 1,"rate_limit_remaining": 1799,"rate_limit_reset_at": "2026-05-13T17:40:00Z"}
7. Crosspost — republish an existing post
Republish an existing Reddit post (or comment) into a different subreddit. The destination sub must allow crossposts (per-sub setting).
Inputs:
- Subreddit (required) — the destination
- Title (required, max 300 chars) — independent of the source post's title
- Source ID (required) — accepts any of:
- Full Reddit post URL —
https://www.reddit.com/r/.../comments/abc123/... t3_fullname —t3_abc123- Raw post ID —
abc123 - Comment URL —
https://www.reddit.com/r/.../comments/.../xyz789/ t1_fullname —t1_xyz789
- Full Reddit post URL —
- Body (optional comment shown above the crossposted source)
- NSFW / Spoiler (optional). Crossposts inherit the source post's flair.
- Optional
crosspost_brand_affiliateboolean — set totrueto mark the post as a brand affiliate disclosure (Reddit-required for sponsored content).
Use it when: boosting a great post into more communities, republishing your own content, surfacing community gold to a wider audience.
Example
Input (republish an existing post URL into r/test)
{"endpoint": "crosspost","crosspost_subreddit": "test","crosspost_title": "Crosspost sample — AITAH chair story","crosspost_id": "https://www.reddit.com/r/AITAH/comments/1p3hgw2/someone_at_work_stole_my_chair_so_i_had_them/","crosspost_body": "Crosspost created via RedCrawler Posting V2.","credentialSource": "vault","accountName": "motor_tip8865"}
Output (one dataset record — the crosspost lives in r/test; url points at the source post)
{"endpoint": "crosspost","success": true,"id": "t3_1tc6kgf","title": "Crosspost sample — AITAH chair story","isNsfw": false,"createdAt": "2026-05-13T17:28:04.737000+0000","url": "https://www.reddit.com/r/AITAH/comments/1p3hgw2/someone_at_work_stole_my_chair_so_i_had_them/","authorInfo": { "id": "t2_29onm7dc32" },"subreddit": { "id": "t5_2qh23", "name": "test" },"ok": true,"rate_limit_used": 11,"rate_limit_remaining": 1789,"rate_limit_reset_at": "2026-05-13T17:30:00Z"}
Credentials
Every endpoint in this actor requires a Reddit Token V2 cookie + the proxy that minted it. Fill the Reddit credentials section at the bottom of the input form.
Credential lifetimes
| Credential | Lifetime | When to refresh |
|---|---|---|
Token V2 (token_v2 cookie) | ~24 hours | Daily — or save a Reddit Session in the vault and let it auto-refresh |
Reddit Session (reddit_session cookie) | ~180 days | Roughly twice a year, or when a run reports unauthorized |
How to extract these from your browser: open Reddit in Chrome / Brave / Edge / Firefox, then DevTools → Application → Cookies →
https://www.reddit.com. Filter bytoken_v2orreddit_sessionand copy the Value column.
You have two options:
Option A — Use a saved account (recommended)
- Run the Reddit Vault actor once to store a Reddit account under a name you choose (e.g.
motor_tip8865,alt-account,burner1). The vault encrypts the Token V2 + matching proxy and stores them keyed by name. If you save a long-livedreddit_sessioncookie alongside it, the vault auto-refreshes the Token V2 for you (~180 days). - In this actor, set Credential source = Use saved account (vault) and put the same name in Saved account name.
- Done — Token V2 + proxy load automatically on every run.
Option B — Paste Token V2 + proxy directly
For one-off runs without setting up the vault:
- Set Credential source = Paste Token V2 + proxy.
- Paste your Reddit
token_v2cookie value (eyJ...) into Token V2. - Paste the matching proxy in
ip:port:user:passformat into Proxy.
Critical: Reddit IP-binds Token V2 cookies. The proxy MUST be the exact same IP that originally minted the Token V2 — otherwise Reddit returns 401 on every call. Both fields are stored encrypted by Apify (isSecret: true).
How to run
- Pick a post type in the "What to create" dropdown at the top.
- Open the matching section below it and fill its fields (subreddit, title, plus the body / URL / options for that type).
- Fill the Reddit credentials section at the bottom (vault account name OR Token V2 + proxy).
- Click Start.
Each post-type section is independent — fields outside your chosen section are ignored, so you can leave them as-is between runs.
Output
Every run pushes exactly one record to the run's default dataset.
Success record
{"endpoint": "text","success": true,"id": "1abc23","name": "t3_1abc23","permalink": "/r/test/comments/1abc23/hello_from_apify/","url": "https://www.reddit.com/r/test/comments/1abc23/hello_from_apify/","subreddit": "test","title": "Hello from Apify!","createdAt": "2026-05-08T19:42:18+00:00"}
The most useful columns (endpoint, success, id, name, permalink, url, subreddit, title, createdAt) are placed first so the dataset Table view is readable without horizontal scrolling.
Failure record
{"success": false,"endpoint": "link","error": "URL has already been submitted","error_kind": "ALREADY_SUB","raw": { "...": "full raw response payload for debugging" }}
error_kind echoes Reddit's structured error code when available (SUBREDDIT_NOTALLOWED, RATELIMIT, BAD_FLAIR_TEMPLATE_ID, ALREADY_SUB, etc.). The plain error string is always set. The raw field carries the full raw response payload for debugging.
Common errors and what to do
Error / error_kind | What it means | Fix |
|---|---|---|
URL has already been submitted (link post) | Someone already posted that URL to that subreddit | Pick a different URL or sub |
SUBREDDIT_NOTALLOWED | Sub doesn't allow this post type, or your account has too little karma / age | Pick a different sub, or read r/{sub}'s posting rules |
RATELIMIT / you are doing that too much | Reddit's per-account post throttle (often 9 minutes between posts on new accounts) | Wait, then re-run |
BAD_FLAIR_TEMPLATE_ID | Flair ID doesn't exist on this sub | Drop the flair fields, or fetch the right ID via the Reddit Flairs V2 actor |
bearer_expired | Your Token V2 expired (24-hour lifetime) | Refresh the vault entry, or paste a fresh Token V2 in manual mode |
Bearer minted on a different IP | The Token V2's binding IP doesn't match the supplied proxy | Re-mint the Token V2 on the proxy you'll use, save both together |
failed to resolve image_url / failed to resolve video_url | Media URL not publicly reachable | Use a CDN URL the actor can GET without auth |
crossposting is not enabled in this community | Source sub disables crossposting | Pick a different source post |
Limits and quirks
- Title length: Reddit caps post titles at 300 characters.
- Body length: 40,000 characters.
- Per-account rate limit: Reddit enforces per-account write limits — pace your runs accordingly to avoid throttling.
- New-account throttle: Brand-new accounts (low age or low karma) get extra cooldowns between posts (sometimes 9 min apart). This is a Reddit-side anti-spam measure, not an actor bug.
- Datacenter proxies: Reddit zero-weights votes from datacenter IPs and aggressively rate-limits them for posting. Use mobile or residential proxies for sustained automation.
- File extension must match: Reddit rejects images whose actual format doesn't match the URL extension (e.g. a
.jpgURL serving a PNG). Make sure the URL extension reflects the real file type. - Video processing: Reddit processes videos asynchronously, so the post can show "Processing" for 30–90 seconds before becoming visible.
- Crosspost source restrictions: Some subreddits disable crossposting from their content.
- Gallery captions: if you supply captions, they align by index — caption #1 attaches to image #1. Trailing missing captions are blank.
Best practices
- Use the Reddit Vault. Save your accounts once with a Reddit Session — Token V2 auto-refresh keeps everything working for ~180 days.
- Match account ↔ subreddit. Brand-new accounts can't post to large default subs. Build account reputation first by commenting in small communities.
- Stagger posts. Reddit's anti-spam looks at velocity — schedule with the Apify Scheduler instead of bursting.
- Mobile / residential proxies only for posting. Datacenter IPs work for read-only scraping but are visibility-degraded for vote / post actions (March 2026 Reddit policy change).
- Respect subreddit rules. Each sub's
r/{sub}/about/rules.jsonlists posting requirements. The Reddit Subreddits V2 actor can fetch them programmatically.
Why this actor is fast
- Speed — 1–3 seconds per call for text/link/poll/crosspost; 5–90 seconds for media. Pure HTTP to Reddit's API. No browser to boot, no Playwright / Selenium / Puppeteer overhead. Competing browser-based scrapers typically take 15–60 seconds per call.
- Reliability — zero browser flakiness. No headless-Chromium crashes. No JS-render timeouts. No captcha pages.
- Footprint — under 512 MB RAM per run for non-media; up to 2 GB for video. Most browser-based scrapers need 1–4 GB even for a tiny text post.
Pricing
Pay-per-result. You're only charged when a record is pushed to the dataset — validation errors that never reach Reddit cost nothing. Failed runs still emit a structured failure record (so you can debug), and that single row is the only thing billed.
| Event | Trigger | Price (per 1,000) |
|---|---|---|
result | Each row pushed to the dataset (success or failure) | $1.99 |
Every endpoint — text / link / image / gallery / video / poll / crosspost — is one row, one charge.
Status & error reference
Run status (Apify-side, shown on the run page)
| Status | Apify message | Meaning | What to do |
|---|---|---|---|
| "Actor succeeded with N results in the dataset" | Run finished. Some or zero records pushed. | Open the dataset to view results. | |
| "The Actor process failed…" | Validation error or upstream Reddit fault. | Check the run log. You are NOT charged for failed runs. | |
| "The Actor timed out. You can resurrect it with a longer timeout to continue where you left off." | Run exceeded its timeout. | Re-run; consider narrowing inputs. | |
| "The Actor process was aborted. You can resurrect it to continue where you left off." | You stopped the run manually. | No charge for unpushed results. |
Common in-run conditions (visible in run log)
| Condition | Cause | Result |
|---|---|---|
RATELIMIT from Reddit | Per-account write throttle hit. | Run SUCCEEDED, failure row with error_kind: RATELIMIT. |
| Bearer expired / invalid | Saved Token V2 past 24 h, no vault Reddit Session for refresh. | Run SUCCEEDED, failure row, no Reddit call made. |
| Bearer minted on a different IP | Saved Token V2's IP doesn't match the saved proxy. | Run SUCCEEDED, failure row. |
SUBREDDIT_NOTALLOWED | Account is banned, muted, or restricted in the subreddit. | Run SUCCEEDED, failure row. |
NO_TEXT / MISSING_TITLE | Required post body or title missing. | Run SUCCEEDED, failure row with error_kind. |
| Media upload failed | Image / video upload rejected by Reddit. | Run SUCCEEDED, failure row. |
| Validation error: missing required field | Required input not provided. | Run FAILED immediately, no charge. |
Companion actors
- Reddit Vault — save Reddit accounts once, reuse them by name across every Reddit actor (free)
- Reddit Flairs V2 — list, set, or remove user / link flair
- Reddit Subreddits V2 — subreddit info, rules, leaderboards, settings
- Reddit Posts & Feeds V2 — allowed post types, home feed, post state controls (save / hide / pin / delete / etc.)
- Reddit Manage Posts V1 — edit, delete, lock, sticky, NSFW / spoiler toggles, vote
- Reddit Commenting V1 — reply to posts and comments
- Reddit Voting V1 — upvote / downvote posts and comments
All of them accept the same accountName field, so saving credentials in Reddit Vault unlocks them all.
Need a different shape of data?
- For scraping posts, comments, users, subreddits — see the V2 read actors (Scrape V2, Search V2, Users V2, Subreddits V2, Bulk V2, Feeds V2).
- For post state controls (save / hide / nsfw / spoiler / pin / delete / 14 more) on posts you've already created — see Reddit Posts & Feeds V2.
- For commenting / voting / moderation — see the V1 action actors.
Support and feedback
Found a bug, want a feature, hit a Reddit error code we don't translate clearly? Open an issue via the actor's Apify Console feedback link, or reach out at the RedCrawler support channel.
Reddit Posting V2 is part of the RedCrawler family of Reddit actors. RedCrawler is independent — not affiliated with, endorsed by, or sponsored by Reddit, Inc. Use it within Reddit's API terms and within each subreddit's posting rules.

