# Shopify BFCM Stock Import: New Products, Restocks, Pricing

A three-pass workflow for importing new products, restocking inventory, and updating compare-at prices before the campaign launches

> How to bulk import new BFCM products, restock existing inventory, and update compare-at prices before Black Friday in three structured import passes.

- Published: 2026-09-22
- Author: Importier Team
- Category: Import Guides / File Imports
- Canonical: https://www.importier.app/blog/shopify-bfcm-stock-import

---

# Shopify BFCM Stock Import: How to Bulk Import Black Friday Inventory Arrivals and Update Pricing Before Peak

A homewares retailer receives three files from their supplier in September. The first lists 95 new BFCM-exclusive products: gift sets, bundles, and seasonal SKUs that do not exist in the store yet. The second is a restock list with 145 existing SKUs and updated inventory quantities for an October shipment. The third is a 240-row pricing sheet mapping each product's RRP to its BFCM discount price.

The deadline is November 1. Every product needs to be live and correctly priced before the campaign launches.

Without a structured workflow, this is three separate data entry jobs. Creating 95 products manually in the Shopify admin, updating 145 inventory quantities one by one, and editing Compare At Price 240 times individually takes three to four working days. With a three-pass import approach, all three jobs run from spreadsheets in under three hours.

This article covers each pass in sequence, including how to configure compare-at prices correctly, avoid overwriting fields you do not intend to change, and have draft products ready to publish in a single bulk action on the campaign date.

<Divider label="The Three BFCM Import Jobs" />

## Why BFCM stock work splits into three separate import passes

The three import jobs require different configurations because each one touches a different set of Shopify product fields. Running them in a single combined file causes errors: a restock file that also contains a Variant Price column will overwrite live prices even when the values are identical, and a new products file that includes existing SKUs can generate duplicate records.

<Compare
  withoutTitle="Manual approach"
  withTitle="Three-pass import workflow"
  withoutItems="Create 95 new products individually in the Shopify admin | Update 145 inventory quantities one variant at a time | Edit Compare At Price on 240 products individually | Risk of overwriting descriptions or pricing in the wrong step"
  withItems="Pass 1: import new products with AI descriptions, BFCM pricing, and Draft status in one file | Pass 2: update-existing mode with inventory columns only, no other fields touched | Pass 3: export the Pricing preset, fill Compare At Price, re-import | Saved import profiles carry the column mapping into every subsequent BFCM season"
/>

![Three colour-coded product carton rows separated on industrial warehouse shelving, each row visually distinct](/blog/shopify-bfcm-stock-import/01.jpg)

**Pass 1: New products.** Creates product records that do not exist in Shopify yet. Includes titles, variants, pricing, compare-at prices, AI descriptions, category metafields, and Draft publication status.

**Pass 2: Inventory restock.** Updates inventory quantities on existing product variants using update-existing mode. Only inventory columns are in the file. All other fields remain unchanged.

**Pass 3: Compare-at price update.** Updates the Compare At Price field on existing products that already have correct descriptions and inventory. Uses a Pricing export as the starting point rather than a manually built file.

## Pass 1: Importing new BFCM products

New BFCM products typically arrive as a standard supplier sheet: product name, variant options, sale price, RRP, SKU, weight, and a specification block.

The key configuration steps for this pass:

<Steps items="Map the supplier's RRP column to Shopify's Compare At Price field and the BFCM sale price to Variant Price | Set publication status to Draft so products land in the admin without going live to customers | Enable AI description generation using the store's saved style, persona, and brand voice settings | Enable the relevant Industry Pack for the product category to fill category metafields from supplier specifications | Confirm the import and verify all 95 product records are created with descriptions and pricing set correctly" />

Setting Compare At Price at import time is the highest-value step in Pass 1. When the BFCM campaign launches, the Compare At Price already holds the original RRP. Shopify's storefront, Google Shopping feed, and social catalogues all display the correct discount amount without any additional editing.

Setting publication status to Draft keeps the products invisible to customers until the campaign date. A batch publish action on November 1 flips all 95 to Active. For stores on Scale or Enterprise plans, Importier's Scheduled Imports feature handles this automatically: configure the import to run once on November 1 with Active status, and the products publish without manual intervention on the day.

AI descriptions run as part of the same import pass. Importier uses the supplier's specification block and product name to generate a complete description per product. The style and persona settings are already saved in the store's import profile, so no reconfiguration is needed for subsequent supplier files arriving later in the season.

For 95 products, the difference between generating descriptions during the import and generating them individually after the fact is several hours of work. Running them as part of the import pass means the products arrive in Shopify fully ready to sell on the day they are published.

<Callout label="Pricing configuration order">
Set Compare At Price to the original RRP during the new products import, not after. Shopify's storefront, Google Shopping, and social catalogues all read Compare At Price on each product sync. Setting it at import time means every downstream channel shows the correct discount framing from the moment the product is published, with no separate bulk edit step required on launch day.
</Callout>

Adding a `bfcm-2026` tag as a batch value during the import lets the November 1 publish action use a tag filter rather than a manual product selection. The tag also enables segmented email flows in marketing tools that read Shopify product tags.

![Seasonal gift boxes in ribbon-tied packaging arranged neatly on a wooden retail surface with warm studio lighting](/blog/shopify-bfcm-stock-import/02.jpg)

## Pass 2: Restocking existing inventory

A restock file for existing products only needs four columns to update inventory correctly: Handle, Variant SKU, Variant Inventory Qty, and Variant Inventory Tracker.

Importier's update-existing mode matches each row to an existing product by Handle. It updates only the fields present in the file. Descriptions, images, pricing, compare-at prices, tags, and metafields are untouched.

For products arriving in two shipments, a pattern common in BFCM seasons where a first October delivery restocks core lines and a second November delivery tops up bestsellers, the restock pass runs twice. The second pass updates inventory quantities to the new figure at the time it runs, rather than overwriting with the first shipment count.

According to [Shopify's inventory management documentation](https://help.shopify.com/en/manual/products/inventory), inventory quantities can be updated in bulk via CSV using the Variant Inventory Qty column. Importier's update-existing mode applies the same field, which means the resulting inventory levels are identical to what a native Shopify CSV import would produce.

The configuration to watch: including any pricing or description column in the restock file, even with values identical to what is already in Shopify, will trigger an overwrite in update-existing mode. A dedicated restock file should contain only Handle, Variant SKU, and the inventory columns.

![Long warehouse aisle with product boxes filling steel shelves floor to ceiling on both sides](/blog/shopify-bfcm-stock-import/03.jpg)

## Pass 3: Bulk compare-at price update for existing products

For existing products that already have correct descriptions and inventory, the compare-at price update uses a two-step process built around Importier's Pricing export preset.

The risk with compare-at price updates is documented in detail in the article about [every product appearing on sale after import](https://importier.app/blog/shopify-every-product-appears-on-sale-after-import): the most common error is mapping cost prices to Compare At Price rather than RRP, which results in every product displaying a discount against its own cost price.

**Step 1: Export.** Run Importier's Pricing export preset. It produces a CSV with one row per variant: Handle, Variant SKU, Variant Price, and Variant Compare At Price. For 240 products, the file is ready in seconds and already contains the correct Handles for matching on re-import.

**Step 2: Fill and re-import.** Add the supplier's RRP figures to the Variant Compare At Price column using a VLOOKUP against the supplier pricing sheet, or by copying the column directly if the file structure matches. Leave Variant Price unchanged. Re-import in update-existing mode. Only the Compare At Price field updates on each product record.

After the import, running the Pricing export again confirms every product has a Compare At Price set and that no Compare At Price is equal to or lower than the current sale price. Per [Shopify's pricing documentation](https://help.shopify.com/en/manual/products/details/pricing), a Compare At Price must exceed the current Variant Price for the storefront to show a sale badge.

For stores managing multiple pricing columns from a supplier, including cost price, wholesale price, RRP, and BFCM discount price, the guide to [supplier pricing sheet imports](https://importier.app/blog/shopify-wholesale-pricing-sheet-import) covers how to handle sheets with six or more price columns and which ones map to which Shopify fields.

<TipBox />

## Saved import profiles for the next BFCM season

Each of the three passes benefits from a saved import profile that preserves the column mapping, AI description settings, and update-existing configuration.

The profile for Pass 1 saves the mapping between the supplier's RRP column and Shopify's Compare At Price field. When a second shipment of new BFCM products arrives in October with the same supplier file format, the same profile handles it without reconfiguration. The only variable is the source file.

For stores with multiple suppliers, each supplier has its own profile. The column headings differ between suppliers, but the output mapping is consistent: RRP to Compare At Price, discount price to Variant Price, SKU to Variant SKU.

The time investment for a three-pass BFCM import is front-loaded into the first season. After the profiles are saved, subsequent seasons use them as starting points. The column mapping from last year's supplier file usually still applies, and the AI description settings reflect the store's established voice, tone, and Industry Pack selection.

The same two-profile approach applies to recurring ERP-based import workflows. The guide to [Shopify ERP product import](https://importier.app/blog/shopify-erp-product-import) covers how to build one profile for initial product creation and a separate one for recurring update cycles, which maps directly to the separation between Pass 1 and Pass 2 described here.

<PullQuote>The first BFCM import season is the configuration investment. Every subsequent season runs from saved profiles, and the column mapping from the previous year usually still applies.</PullQuote>

![Small retail price tags in alternating red and cream hanging from cords on a polished metal rod against a neutral background](/blog/shopify-bfcm-stock-import/04.jpg)

## Getting all BFCM products live on November 1

On November 1, the action needed to launch is minimal because the three import passes have done the preparation.

Draft products with the `bfcm-2026` tag are in the Shopify admin. Filtering the Products list by the tag and using the bulk action to set Status to Active publishes all of them simultaneously. Google Shopping picks up the new products within 24 to 48 hours of publication, depending on the store's feed sync frequency.

Compare-at prices are already set on all 240 existing products. The storefront discount badges display correctly from the moment campaign traffic arrives, without a last-minute pricing edit session.

Inventory quantities from Pass 2 reflect actual stock on hand. Products that were correctly restocked in October do not go out of stock on the first day of the campaign.

The preparation step that the three-pass import does not cover is the broader catalogue audit for products already in the store before the BFCM season. The article on [pre-BFCM catalogue preparation](https://importier.app/blog/shopify-bfcm-catalogue-preparation) covers the full checklist: checking descriptions are complete, GTINs are present, and category metafields are filled for all existing products before campaign traffic arrives.

---

Try Importier free at [importier.app](https://importier.app)
