Guide · Blog posts import
Blog posts
Blog posts are the only resource on BigCommerce's v2 API, and v2 is fussier: one accepted date format, tags as a list rather than a string, and a summary field that refuses to be written.
1. Commands
| Command | Description | Behaviour |
|---|---|---|
| NEW | Create a new blog post. | Fails if a post with the same title already exists. |
| UPDATE | Update an existing post. | Uses Post ID if given, otherwise finds the post by title. If two posts share the title, the row fails and names their ids rather than editing the wrong one. |
| MERGE | Create or update. | The default. If the post exists it updates; otherwise it creates. |
| DELETE | Delete a blog post. | Uses Post ID if given, otherwise finds it by title — and refuses if the title matches more than one post. |
| REPLACE | Refused for blog posts. | Fails the row. Re-creating a post would give it a new id and a new URL, breaking every link to and share of it. Use UPDATE. |
| IGNORE | Skip this row. | Does nothing, and is recorded as skipped rather than as a success. |
2. All supported columns
| CSV column | BigCommerce field | Required | Description |
|---|---|---|---|
Command | — | Optional | NEW | MERGE | UPDATE | DELETE | IGNORE. Default MERGE. |
Post ID | id | Optional | BigCommerce blog post id. Provide it for UPDATE/DELETE to avoid the title lookup. |
Title | title | Required | Blog post title. |
Body | body | Required | Full HTML content of the post. |
Is Published | is_published | Optional | true published, false draft. Default false. |
Published Date | published_date | Optional | Write it however you like — 2026-04-14, 14 Apr 2026 08:00, or the full form. It is converted to the one format BigCommerce accepts. |
Author | author | Optional | Author display name. |
URL | url | Optional | Custom URL slug, e.g. /blog/my-post. Generated from the title if omitted. |
Thumbnail Path | thumbnail_path | Optional | WebDAV path to a thumbnail, e.g. /product_images/blog/thumb.jpg. |
Tags | tags | Optional | Comma-separated, e.g. "news,tips,ecommerce". New tags are created for you. Note that the whole list replaces the post's tags. |
Meta Keywords | meta_keywords | Optional | SEO keywords. |
Meta Description | meta_description | Optional | SEO meta description. |
3. Tags
Tags are plain strings — there is no separate create step. Importing a post with Tags = "news,tips" creates the news and tips tags if the blog does not have them.
To see every existing tag and which posts use them, run an export of blog posts filtered by tag.
Note that the list is a replacement, not an addition: a row supplying Tags sets the post's tags to exactly that list.
4. The published date
BigCommerce accepts exactly one format here, and it is not the format it hands back on a read. So write the date any way a human would — 2026-04-14, 14 Apr 2026 08:00, or the full RFC 2822 form — and the importer converts it.
If you omit the column, BigCommerce uses the moment the post is published.
5. Example file
Command,Post ID,Title,Body,Is Published,Published Date,Author,Tags,Meta Description
NEW,,My First Post,"<h1>Hello</h1><p>Welcome to our blog!</p>",true,"Mon, 14 Apr 2026 08:00:00 -0000",John,,First blog post
MERGE,,Tips & Tricks,"<p>Here are our top tips...</p>",true,,Admin,"tips,howto",Tips for customers
UPDATE,101,,,false,,,,
DELETE,102,,,,,,,
IGNORE,,Draft Post,Work in progress,false,,,,
6. Things worth knowing
- There is no Summary column. BigCommerce writes the summary itself from the start of the body and refuses to be told one — a
Summarycolumn would fail the whole post, so the importer ignores it and the file check tells you it is being ignored. - Titles are not unique. Two posts may share one. When they do, a row identified only by
Titlefails and lists the matching ids, so put thePost IDof the one you mean. That matters most for DELETE. - The whole blog is searched when a row has no id. There is no title filter on this endpoint, so finding a post by title means walking the posts. It is correct on a large blog, where reading only the first page used to report "not found" — and then MERGE created a duplicate.
- Blank cells never overwrite. A column you leave out, or leave empty, is not sent; a cell holding only spaces counts as empty.
- Check before you run. The file check flags any column that would be ignored, and a dry run previews every row without writing anything.