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.
| Destination | CSV / Google Sheets columns | API / MCP settings |
|---|---|---|
| WordPress | wordpress_seo_plugin, wordpress_meta_title, wordpress_meta_description, wordpress_canonical_url | seo_plugin, meta_title, meta_description, canonical_url |
| WordPress image | wordpress_featured_media_id or wordpress_featured_media_url, wordpress_featured_media_alt_text | featured_media_id or featured_media_url, featured_media_alt_text |
| Ghost | ghost_meta_title, ghost_meta_description, ghost_canonical_url, ghost_featured_image_url, ghost_featured_image_alt, ghost_featured_image_caption | Remove the ghost_ prefix |
| Hashnode | hashnode_meta_title, hashnode_meta_description, hashnode_canonical_url, hashnode_cover_image_url, hashnode_og_image_url | Remove the hashnode_ prefix |
| DEV.to | dev_to_description, dev_to_canonical_url, dev_to_main_image_url | description, canonical_url, main_image_url |
| Blogger | blogger_title, blogger_tags; shared article text and image columns | title, 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.