rtrvr.ai
Browser ExtensionStart in Chrome, on the page you're on.CloudA thousand browsers, on your schedule.RoverThe AI customer engineer for your product.Data & EvalsExpert trajectories for AI labs.
ACCESSAPI + MCPCLI & SDKTemplatesIntegrationsWhatsApp
Use cases
Vibe ScrapingLead EnrichmentWeb MonitoringForm FillingJob ApplicationsSocial MediaAI Web ContextAgentic CheckoutAll use cases
Pricing
BlogLaunches, benchmarks, deep divesDocsExtension, Cloud, API, MCP, CLICase StudiesReal teams, real runsVideosNew runs every weekChangelogWhat just shippedNewslettersProduct releases and real runs
Docs
Log inBook DemoAdd to Chrome
Log in
Menu
Add to ChromeBook a demo
ProductsBrowser ExtensionCloudRoverData & EvalsExploreUse casesPricingResourcesDocs

Opening template…

rtrvr.ai

Make every site
work for you.

Launches first, roadmap early, and the occasional trick we only share by email.

Products

Browser ExtensionCloudRoverData & Evals

Use cases

Vibe ScrapingLead EnrichmentForm FillingWeb MonitoringSocial MediaJob ApplicationsData MigrationAI Web ContextAgentic Checkout

Resources

DocsBlogData for AI LabsCase StudiesVideosNewslettersChangelogPricingAppSumoDemoAffiliate

Company

TeamContactGCP PartnerWhat We BelieveSecurityPrivacyTerms

Developers

APIMCPCLI & SDKTemplatesIntegrationsWhatsApp

Compare

ApifyBardeenBrowserbaseBrowser UseClayClaudeCometFirecrawl
Products
Browser ExtensionCloudRoverData & Evals
Use cases
Vibe ScrapingLead EnrichmentForm FillingWeb MonitoringSocial MediaJob ApplicationsData MigrationAI Web ContextAgentic Checkout
Resources
DocsBlogData for AI LabsCase StudiesVideosNewslettersChangelogPricingAppSumoDemoAffiliate
Company
TeamContactGCP PartnerWhat We BelieveSecurityPrivacyTerms
Developers
APIMCPCLI & SDKTemplatesIntegrationsWhatsApp
Compare
ApifyBardeenBrowserbaseBrowser UseClayClaudeCometFirecrawl
BACKED BYNVIDIA InceptionGoogle Cloud for StartupsBright DataNEC XSalesforce LaunchpadElevenLabs GrantsGMI CloudComposioSmallest.ai Grants
DISCOVERYllms.txtllms-full.txtagents.mdDocumentation indexSitemapOpenAPIAI Catalog
© 2026 rtrvr.ai
DiscordYouTubeInstagramTikTokLinkedInXGitHub
support@rtrvr.ai
Back to templates

RUN FROM A SPREADSHEET TEMPLATE

Publish posts from a spreadsheet

Use a Google Sheet to prepare and publish posts across the channels you choose.

RUNS INYour signed-in browser
SETUPOne target or a Google Sheet
WHAT YOU GET03 PARTS
  1. 01One post per Sheet row
  2. 02Copy formatted for each channel
  3. 03Published link or status for each row
EXAMPLE INPUTPost to 20 LinkedIn accounts from sheet

SET UP YOUR RUN

Add the details. Check the result. Run it.

No code needed.
01

Choose your starting list

Run once for one target, or repeat it for every row in a Google Sheet.

Google Sheet

Choose the Sheet with one target per row.

EXPECTED COLUMNSplatform, profile_url, post_content (optional)

No sheet selected. Choose one from Google Drive.

Sign in to choose a Sheet

Your run stays disabled until the Sheet is connected.

02

Tell rtrvr what to use

Required details are marked. The example text shows the expected format.

Used when the post_content cell is empty.

03

Choose where it runs

Cloud uses a fresh managed browser. The extension uses the sites you are already signed into.

Your browser is required. This template needs a site where you are signed in.

Choose a browser

Pick a browser where the rtrvr extension is online.

Get the extension
Finish setup in your browser
  1. Install the extension
  2. Sign in to rtrvr
  3. Come back and choose the browser
ONE MORE STEP

Add the required details to continue.

WHAT HAPPENS NEXT

From setup to finished result.

  1. 01

    rtrvr opens the right sites. It uses Cloud or the signed-in browser you chose.

  2. 02

    The browser does the job. You can follow the run and step in if a site asks for help.

  3. 03

    You get the result. The output above is the shape to expect.

ADVANCEDRequest JSONOptional

Exact request sent to the run panel.

REQUEST.JSON
{
  "source": "retrieve",
  "template": {
    "id": "bulk_social_poster",
    "slug": "bulk-social-poster",
    "name": "Bulk Social Poster",
    "categoryId": "SOCIAL_SCALE"
  },
  "inputs": {
    "sheetUrl": "",
    "platform": "all",
    "contentTopic": "",
    "contentStyle": "professional",
    "__inputSource": "sheet"
  },
  "agentHint": "You are posting to multiple social accounts. Adapt to each platform's UI.\n\n**TASK CONFIGURATION:**\n- Sheet URL: \n- Platform Filter: all\n- Content Topic: \n- Content Style: professional\n\n---\n\n## STEP 1: LOAD SHEET DATA\n\n1. Navigate to \n2. Read all rows\n3. **Expected columns:**\n   - platform (linkedin, x, threads, reddit, substack)\n   - profile_url (where to post)\n   - post_content (optional - overrides generation)\n4. Filter rows if all !== \"all\"\n5. Count valid rows\n\n---\n\n## PLATFORM CHARACTER LIMITS - MEMORIZE\n\n| Platform  | Limit        | Notes                    |\n|-----------|--------------|--------------------------|\n| LinkedIn  | ~3,000 chars | Soft limit               |\n| X/Twitter | 280 chars    | **STRICT - HARD LIMIT**  |\n| Threads   | ~500 chars   | Soft limit               |\n| Reddit    | ~40,000      | Title: 300, varies by sub|\n| Substack  | No limit     | Notes: ~2,500 chars      |\n\n---\n\n## STEP 2: PROCESS EACH ROW\n\nFor each valid row:\n\n### A. IDENTIFY PLATFORM\n- Read platform column\n- Apply filter if all !== \"all\"\n- Skip if doesn't match filter\n\n### B. NAVIGATE TO POSTING LOCATION\n1. Go to profile_url for this row\n2. Wait for page to load\n3. **Check authentication:**\n   - If not logged in: Log \"Auth required for [platform]\" and continue\n   - If logged in: Proceed\n\n### C. PREPARE POST CONTENT\n\n**IF post_content column has content:**\nUse it exactly.\n\n**⚠️ VALIDATE AGAINST PLATFORM LIMIT:**\n- Get character count\n- Compare to platform limit above\n- **If X/Twitter and > 280 chars:**\n  - Log \"Content exceeds X 280 char limit ( chars)\"\n  - Skip this row (DO NOT truncate without permission)\n- For other platforms over limit: Log warning\n\n**ELSE generate content:**\n- Topic: \"\"\n- Style: professional\n- Platform-specific formatting:\n\n**LinkedIn:** Professional hook, value-driven, 150-250 words, 3-5 hashtags at end\n**X/Twitter:** Punchy, under 280 chars, no hashtags in main text, thread if needed\n**Threads:** Conversational, authentic, under 500 chars, question or discussion starter\n**Reddit:** Value-first, match subreddit culture, non-promotional, check rules\n**Substack:** Newsletter tone, thoughtful, can be longer for posts\n\n### D. CREATE THE POST\n1. Find post creation area (varies by platform)\n2. Open composer/editor\n3. Enter content\n4. **Before submitting:**\n   - Check for validation errors\n   - Verify character count acceptable\n   - Review formatting\n5. Submit/publish\n\n### E. VERIFY & LOG\n1. Wait for post confirmation\n2. Capture post URL if possible\n3. Log result (success, failed, skipped)\n4. Note any warnings\n\n### F. RATE LIMITING\n- Wait 30-60 seconds between posts\n- Each platform has different limits\n- **If any warning appears:** STOP and report\n\n---\n\n## STEP 3: GENERATE COMPLETION REPORT\n\n```json\n{\n  \"totalRows\": <number>,\n  \"processed\": <number>,\n  \"successful\": <number>,\n  \"skippedOverLimit\": <number>,\n  \"authRequired\": <number>,\n  \"failed\": <number>,\n  \"results\": [\n    {\n      \"rowIndex\": <number>,\n      \"platform\": \"\",\n      \"profileUrl\": \"\",\n      \"contentSource\": \"sheet|generated\",\n      \"postContent\": \"\",\n      \"characterCount\": <number>,\n      \"platformLimit\": <number>,\n      \"withinLimit\": true|false,\n      \"status\": \"posted|skipped_over_limit|auth_required|failed\",\n      \"postUrl\": \"\",\n      \"error\": \"\"\n    }\n  ],\n  \"platformBreakdown\": {\n    \"linkedin\": { \"attempted\": 0, \"successful\": 0 },\n    \"x\": { \"attempted\": 0, \"successful\": 0 }\n  }\n}\n```\n\n---\n\n## X/TWITTER CRITICAL REMINDER\n\n**The 280 character limit is ABSOLUTE.**\n- Count EVERY post destined for X\n- Never truncate without explicit permission\n- Log exact count when over limit\n- Skip and report, let user fix",
  "userInput": "You are posting to multiple social accounts. Adapt to each platform's UI.\n\n**TASK CONFIGURATION:**\n- Sheet URL: \n- Platform Filter: all\n- Content Topic: \n- Content Style: professional\n\n---\n\n## STEP 1: LOAD SHEET DATA\n\n1. Navigate to \n2. Read all rows\n3. **Expected columns:**\n   - platform (linkedin, x, threads, reddit, substack)\n   - profile_url (where to post)\n   - post_content (optional - overrides generation)\n4. Filter rows if all !== \"all\"\n5. Count valid rows\n\n---\n\n## PLATFORM CHARACTER LIMITS - MEMORIZE\n\n| Platform  | Limit        | Notes                    |\n|-----------|--------------|--------------------------|\n| LinkedIn  | ~3,000 chars | Soft limit               |\n| X/Twitter | 280 chars    | **STRICT - HARD LIMIT**  |\n| Threads   | ~500 chars   | Soft limit               |\n| Reddit    | ~40,000      | Title: 300, varies by sub|\n| Substack  | No limit     | Notes: ~2,500 chars      |\n\n---\n\n## STEP 2: PROCESS EACH ROW\n\nFor each valid row:\n\n### A. IDENTIFY PLATFORM\n- Read platform column\n- Apply filter if all !== \"all\"\n- Skip if doesn't match filter\n\n### B. NAVIGATE TO POSTING LOCATION\n1. Go to profile_url for this row\n2. Wait for page to load\n3. **Check authentication:**\n   - If not logged in: Log \"Auth required for [platform]\" and continue\n   - If logged in: Proceed\n\n### C. PREPARE POST CONTENT\n\n**IF post_content column has content:**\nUse it exactly.\n\n**⚠️ VALIDATE AGAINST PLATFORM LIMIT:**\n- Get character count\n- Compare to platform limit above\n- **If X/Twitter and > 280 chars:**\n  - Log \"Content exceeds X 280 char limit ( chars)\"\n  - Skip this row (DO NOT truncate without permission)\n- For other platforms over limit: Log warning\n\n**ELSE generate content:**\n- Topic: \"\"\n- Style: professional\n- Platform-specific formatting:\n\n**LinkedIn:** Professional hook, value-driven, 150-250 words, 3-5 hashtags at end\n**X/Twitter:** Punchy, under 280 chars, no hashtags in main text, thread if needed\n**Threads:** Conversational, authentic, under 500 chars, question or discussion starter\n**Reddit:** Value-first, match subreddit culture, non-promotional, check rules\n**Substack:** Newsletter tone, thoughtful, can be longer for posts\n\n### D. CREATE THE POST\n1. Find post creation area (varies by platform)\n2. Open composer/editor\n3. Enter content\n4. **Before submitting:**\n   - Check for validation errors\n   - Verify character count acceptable\n   - Review formatting\n5. Submit/publish\n\n### E. VERIFY & LOG\n1. Wait for post confirmation\n2. Capture post URL if possible\n3. Log result (success, failed, skipped)\n4. Note any warnings\n\n### F. RATE LIMITING\n- Wait 30-60 seconds between posts\n- Each platform has different limits\n- **If any warning appears:** STOP and report\n\n---\n\n## STEP 3: GENERATE COMPLETION REPORT\n\n```json\n{\n  \"totalRows\": <number>,\n  \"processed\": <number>,\n  \"successful\": <number>,\n  \"skippedOverLimit\": <number>,\n  \"authRequired\": <number>,\n  \"failed\": <number>,\n  \"results\": [\n    {\n      \"rowIndex\": <number>,\n      \"platform\": \"\",\n      \"profileUrl\": \"\",\n      \"contentSource\": \"sheet|generated\",\n      \"postContent\": \"\",\n      \"characterCount\": <number>,\n      \"platformLimit\": <number>,\n      \"withinLimit\": true|false,\n      \"status\": \"posted|skipped_over_limit|auth_required|failed\",\n      \"postUrl\": \"\",\n      \"error\": \"\"\n    }\n  ],\n  \"platformBreakdown\": {\n    \"linkedin\": { \"attempted\": 0, \"successful\": 0 },\n    \"x\": { \"attempted\": 0, \"successful\": 0 }\n  }\n}\n```\n\n---\n\n## X/TWITTER CRITICAL REMINDER\n\n**The 280 character limit is ABSOLUTE.**\n- Count EVERY post destined for X\n- Never truncate without explicit permission\n- Log exact count when over limit\n- Skip and report, let user fix",
  "urls": [],
  "meta": {
    "createdAt": "",
    "userAgent": ""
  },
  "execution": {
    "mode": "device",
    "deviceIds": []
  }
}

MORE STARTING POINTS

Other templates for run from a spreadsheet.

See all templates
RUN FROM A SPREADSHEETSend LinkedIn messages from a spreadsheet

Use a Google Sheet to send a tailored LinkedIn message to each profile.

RUN FROM A SPREADSHEETSend Instagram messages from a spreadsheet

Use a Google Sheet to send a tailored Instagram message to each account.

RUN FROM A SPREADSHEETSend X messages from a spreadsheet

Use a Google Sheet to send a tailored X message to each account.