Skip to content

Publishing Workflows

Blog Publishing through CSV, Sheets, API and MCP

Carry blog SEO, featured images and social previews through bulk imports and automation without losing destination-specific fields.

A post moving into a publishing calendar

Use the same field names in bulk CSV and the connected Google Sheets workflow. API and MCP use the corresponding names inside each platform's settings object, without the bulk prefix.

DestinationCSV / Google Sheets columnsAPI / MCP settings
WordPresswordpress_seo_plugin, wordpress_meta_title, wordpress_meta_description, wordpress_canonical_urlseo_plugin, meta_title, meta_description, canonical_url
WordPress imagewordpress_featured_media_id or wordpress_featured_media_url, wordpress_featured_media_alt_textfeatured_media_id or featured_media_url, featured_media_alt_text
Ghostghost_meta_title, ghost_meta_description, ghost_canonical_url, ghost_featured_image_url, ghost_featured_image_alt, ghost_featured_image_captionRemove the ghost_ prefix
Hashnodehashnode_meta_title, hashnode_meta_description, hashnode_canonical_url, hashnode_cover_image_url, hashnode_og_image_urlRemove the hashnode_ prefix
DEV.todev_to_description, dev_to_canonical_url, dev_to_main_image_urldescription, canonical_url, main_image_url
Bloggerblogger_title, blogger_tags; shared article text and image columnstitle, tags; article content and media

WordPress and Ghost also accept og_title, og_description, og_image_url, twitter_title, twitter_description and twitter_image_url. Prefix them with wordpress_ or ghost_ in CSV and Sheets. Plugin-specific limitations still apply to WordPress.

CSV and Google Sheets

Choose Choose platforms & download on the Bulk Post page to get a template with only the platforms and fields you need. Download a fresh copy before each batch because fields change frequently. The full template remains available under Need every platform and field?; avoid keeping an old full template as your working copy. Keep the headers intact, enter direct image URLs and quote CSV cells containing commas or multiline text. Include the destination's title column and connected account selection. Blank optional cells retain normal defaults; they do not request that existing remote metadata be erased.

WordPress uses wordpress_status=publish or draft. Ghost, Hashnode, DEV.to and Blogger use their corresponding status column with published or draft. Postly's scheduling controls determine when the row is sent.

For wordpress_seo_plugin, use auto, rank_math, yoast, aioseo, seopress, seo_framework or slim_seo. The installed plugin must match the choice. The same values work in Google Sheets.

Preview imported rows and resolve validation errors before scheduling. Known SEO/image columns unsupported by the destination are rejected instead of ignored. In the connected Sheets workflow, invalid rows are not turned into publishable posts; review the import result and source row before retrying.

API and MCP

Supply the destination identifier and title with its settings. This is an example settings object, not a complete publish request:

{
  "identifier": "wordpress",
  "title": "An article about accessible design",
  "status": "draft",
  "seo_plugin": "rank_math",
  "meta_title": "Accessible design in practice",
  "meta_description": "Practical ways to make everyday design easier to use.",
  "featured_media_url": "https://example.com/images/design.jpg",
  "featured_media_alt_text": "A person using a keyboard to navigate a website",
  "og_image_url": "https://example.com/images/design-social.jpg"
}

Use ghost, hashnode, devTo or blogger for the other identifiers. Consult the API schema or MCP tool schema for required account, workspace, text and media fields. Do not substitute seo_title or seo_description for documented field names.

Inspect delivery results, including warnings and the remote article ID/link. MCP clients can report a successful tool request before all scheduled work has completed; read the resulting post status. A WordPress SEO warning is a request to inspect the existing article, not a reason to invoke publishing again.

Related guides

Previous guide

API Workflows

See how Postly API fits into app backends, CMS pipelines, automations, and custom publishing systems.

Next guide

Build an Ongoing Social Media Campaign

A repeatable campaign system with a practical brief, content rotation, reply templates, and review checklist.

Related guides