
Scheduling tweets with images in Buffer is a repeatable way to turn a WordPress archive into a reviewed queue of X posts, still commonly searched as tweets, with relevant links, visuals, and hashtags. To automatically generate tweets for the queue, export your post data, clean it in Google Sheets, draft varied copy, map each post to its featured image, and send approved rows to Buffer.
This guide shows how to schedule tweets with images without relying on retired plugins or obsolete scraping tools. You will build a reusable content inventory, review every caption and hashtag, test one row, and then add the rest to your Buffer queue through a controlled automation workflow.
The process covers nine practical steps:
- Export titles, URLs, status, post type, and featured-image URLs from WordPress.
- Open the CSV in Google Sheets and keep only the fields you need.
- Normalize any relative slugs into full URLs.
- Filter the inventory to published posts that are worth resharing.
- Draft relevant hashtags with AI, then review them manually.
- Assemble the final X post text in the sheet.
- Match each row to a featured image URL and useful alt text.
- Send one test row to Buffer before enabling the full queue.
- Connect new WordPress posts to the same approval path.
A large archive still takes judgment. The goal is not to dump identical posts into a scheduler. It is to create a clean inventory, vary the copy, check the visuals, and approve what reaches your social feed.
If your WordPress export uses database-style column names, wp_post_name is the slug, wp_post_title is the title, wp_post_status identifies published posts, wp_post_type separates posts from pages and attachments, and wp_post_date records the publication date. Delete or hide bulky fields such as wp_post_content, revisions, and attachment rows. Keep the raw CSV in one tab and create a tidy working sheet containing the full URL, post title, status, type, date, image URL, draft caption, hashtags, and approval state.
Relative URLs can still be repaired with the familiar spreadsheet method: insert a column to the left of the slug, populate it with your domain, create a full URL column, and use =CONCAT(A2,B2). Drag the formula to the bottom, copy the completed column, then choose Paste special and Values only before deleting the temporary domain and slug columns. The result is a stable list of every article URL mapped to its title. Airtable can import the CSV into a base and add filtering views, but it is not required.
Do not install the retired AYLIEN Text Analysis add-on or depend on the old Import.io desktop Extractor. Use a current AI assistant to suggest hashtags from each title and URL, then complete the manual part: check every row, delete irrelevant suggestions, remove stray commas, and keep only two or three useful hashtags. Pull featured-image URLs directly from WordPress instead of turning extraction on, clicking a header image, choosing Just one row, or running scrape queries. This avoids brittle image ordering and gives each tweet the correct visual.
Once the CSV is downloaded, open it in Google Sheets and slim the bulk data down. A slug consists of the part that comes after the domain, so a column called domain plus a slug column becomes the full address. If instructions tell you to open an Add-ons menu, choose Hashtag suggestion from a dropdown, spend API calls, switch extraction active, click a page element, or hit Done in an Extractor box, skip those actions. Those apps and add-ons no longer provide a dependable route from an entire archive to a connected spreadsheet.
The Buffer connection is configured in Zapier as an automation called a Zap. Connecting apps together allows a published row to be added to a Buffer account, but the configuration still needs sample data and an approval check. You can paste approved rows into the connected spreadsheet, send the combined caption and image, and inspect the result before the remaining archive is queued. Content Inbox, an RSS applet, and the WordPress plugin are alternatives for content added later.
When the sheet is ready, create a sample row so the Zap can pick up real data. Map the tweet text, full URL, image URL, and account, run a test, inspect the resulting Buffer item, and only then paste or approve the remaining rows. For ongoing publishing, an RSS-to-Buffer Zap, an IFTTT connection, or the WordPress to Buffer plugin can feed new posts into the same review path. Keep approval in the loop so the social feed never becomes a stream of duplicate automated posts.
Export your WordPress post archive
Start with a structured export. The old WP CSV plugin is no longer a safe choice because WordPress.org closed it following a security issue. A current option is Export All URLs, which can export the fields this workflow needs without forcing you to scrape every page.

Configure the export for posts and include the post title, full URL, publication status, post type, and featured-image URL. CSV is convenient for Google Sheets. JSON is also useful if the data will move through an API or a custom script.
Keep the raw export unchanged in a separate tab. That gives you a source-of-truth snapshot before filtering, rewriting, or scheduling anything.
Open the CSV file in Google Sheets
Upload the CSV to Google Sheets. Create a working tab with these columns: title, URL, status, post type, featured image URL, draft copy, hashtags, final post, image alt text, approval status, and Buffer status.

Remove or hide fields that do not affect scheduling, but keep enough metadata to identify each post. Freeze the header row, turn on filters, and protect the source columns if more than one person will review the sheet.
You can use Airtable for richer views and collaboration, but it is optional. Google Sheets can handle the filtering, formulas, approvals, and Zapier trigger needed for this workflow.
Turn slugs into full URLs
If your export already includes complete URLs, leave them alone. If it contains only slugs, add your domain in one column and combine it with the slug in another. The original spreadsheet method still works:
=CONCAT(A2,B2)

A safer version checks whether the value is already a full URL before adding the domain:
=IF(REGEXMATCH(B2,"^https?://"),B2,$A$2&B2)
Copy the formula down, then paste the results as values if another tool will consume the sheet. Spot-check URLs from the beginning, middle, and end of the list before continuing.
Filter the archive to useful, published posts
Filter the inventory to published posts and remove attachments, revisions, drafts, private content, redirects, and URLs that no longer represent useful pages. This is also the point to remove announcements that have expired and posts whose advice is no longer accurate.

Add an approval-status column with values such as Review, Approved, Hold, and Skip. Do not send every old post simply because it exists. A clean archive is more valuable than a large archive.
For repeated campaigns, add a variant group or last-scheduled date. Current X automation rules and scheduler safeguards make duplicative or substantially similar posts a poor strategy. Vary the opening, context, and takeaway instead of recycling the same text indefinitely.
Generate hashtags in Google Sheets with AI
Use an approved AI assistant to draft two or three relevant hashtags from each title, URL, and short summary. Ask for specific terms a real reader might follow, not generic labels. The output belongs in a draft column until a person reviews it.

Buffer hashtags work best when they are relevant to the post and readable in the final copy. Delete vague, repetitive, or invented tags. Check capitalization for multiword hashtags, avoid unrelated trending topics, and keep enough room for the actual message.
AI can accelerate the first pass, but it cannot decide whether a tag fits your audience or current context. Manual review is the control that prevents a fast spreadsheet workflow from publishing low-quality copy.
Paste in the titles and generate the full tweet text
Combine the drafted caption, URL, and reviewed hashtags into one final-post column. A simple formula keeps the row structure clear:
=CONCATENATE(A2," ",B2," ",C2)

Standard X posts allow more room than the old 140-character limit, but concise copy is still easier to scan. Use the space for a clear takeaway, not filler. Keep the title, URL, and hashtags in separate source columns so you can revise one element without rebuilding the whole row.
Create at least two copy variants for posts you may schedule again. Change the angle and useful takeaway, not just one adjective. That produces a better reader experience and avoids duplicate-post problems.
Match every post to its featured image
If you exported the featured-image URL from WordPress, the image mapping is already in the correct row. There is no need to run a separate page scraper. Check that each URL loads over HTTPS and points to the intended image rather than a thumbnail, placeholder, or retired asset.

Add a short alt-text column that describes what the image shows. Current social publishing tools can carry accessible descriptions, and a review column makes it easier to catch missing or misleading visuals before scheduling.
Use images you have the right to publish. Avoid hotlinking third-party assets. If a post has no suitable visual, hold the row until you can select or create one instead of sending a broken image URL.
Send the tweets and images to Buffer
Buffer remains the destination for the queue. You can connect Google Sheets to Buffer through Zapier, or use Buffer’s supported API when you need a custom integration. Map the final post text and image URL to the connected X channel.

Start with one approved sample row. Confirm the text, link preview, image, alt text, and target channel in Buffer. Then choose Add to Queue or Schedule Post according to your publishing plan.
Only after the sample is correct should you enable the rest of the approved rows. Write the returned Buffer status or item ID back to the sheet so a retry cannot create duplicates.
For teams that need a governed path from content approval to execution, Process Street is a single Compliance Operations Platform with Docs and Ops capability areas plus built-in AI. It can hold the review steps, owners, approvals, and evidence around the publishing automation while Buffer handles the social queue.
Bonus tip: Automatically add new content to Buffer as it is posted
The archive import is a one-time job. New posts need an ongoing trigger that enters the same review path. Pick one of these current options:

- Use Buffer’s current Feeds feature to review new items before adding them to a queue.
- Use the maintained Social Media Auto Poster, Schedule & Publish to Buffer WordPress plugin.
- Connect RSS to Buffer through Zapier.
- Use the current Buffer and RSS connection on IFTTT.
Whichever route you choose, keep the approval step. A new WordPress post should create a draft social item, not bypass review and publish blindly. That keeps the queue useful as your archive and publishing cadence grow.
Frequently asked questions
Can Buffer schedule X posts with images?
Yes. Buffer supports scheduling X posts with text, links, and supported media. Test one item first so you can confirm the image, text, account, and queue position.
How many hashtags should I use in a Buffer post?
There is no universal number. Start with two or three specific, relevant hashtags and remove any that do not help the intended audience understand or find the post.
Should I schedule the same tweet repeatedly?
Avoid duplicative or substantially similar automated posts. Create distinct variants with a different useful angle, context, or takeaway, then review each one before scheduling.
Do I need Airtable or a scraping tool?
No. A WordPress export that includes full URLs and featured-image URLs can move directly into Google Sheets. Airtable is optional when you want richer views or collaboration.