<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: 王磊</title>
    <description>The latest articles on DEV Community by 王磊 (@_172c9b2760d6c5bc1e8966).</description>
    <link>https://dev.to/_172c9b2760d6c5bc1e8966</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3964002%2Fd67ecd17-1334-49df-abff-4386876a8a76.png</url>
      <title>DEV Community: 王磊</title>
      <link>https://dev.to/_172c9b2760d6c5bc1e8966</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/_172c9b2760d6c5bc1e8966"/>
    <language>en</language>
    <item>
      <title>Shopify CSV Variant Updates: Why a Tiny Batch Protects Existing Options</title>
      <dc:creator>王磊</dc:creator>
      <pubDate>Tue, 21 Jul 2026 01:39:40 +0000</pubDate>
      <link>https://dev.to/_172c9b2760d6c5bc1e8966/shopify-csv-variant-updates-why-a-tiny-batch-protects-existing-options-2kci</link>
      <guid>https://dev.to/_172c9b2760d6c5bc1e8966/shopify-csv-variant-updates-why-a-tiny-batch-protects-existing-options-2kci</guid>
      <description>&lt;p&gt;A Shopify product CSV can look valid in a spreadsheet and still change more variants than you intended. This is especially easy to miss when you are updating prices, inventory, SKUs, or option values on an existing catalog.&lt;/p&gt;

&lt;p&gt;The safest approach is to treat a CSV update as a comparison problem, not just a formatting problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Keep a last-known-good export
&lt;/h2&gt;

&lt;p&gt;Before editing, save a fresh Shopify product export as the baseline. Keep it unchanged. Your working file should be a separate copy.&lt;/p&gt;

&lt;p&gt;At minimum, preserve these identity fields while you work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Handle&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Option1 Name&lt;/code&gt;, &lt;code&gt;Option1 Value&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Option2 Name&lt;/code&gt;, &lt;code&gt;Option2 Value&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Option3 Name&lt;/code&gt;, &lt;code&gt;Option3 Value&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Variant SKU&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Variant Barcode&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a row is meant to update an existing variant, its identity should remain recognizable in both files.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Check each Handle as a group
&lt;/h2&gt;

&lt;p&gt;Shopify product CSVs represent a product and its variants across multiple rows. Group the file by &lt;code&gt;Handle&lt;/code&gt; and compare the variant count with the baseline.&lt;/p&gt;

&lt;p&gt;For every product group, look for:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A Handle that was accidentally renamed or blanked.&lt;/li&gt;
&lt;li&gt;A populated option value without the matching option name.&lt;/li&gt;
&lt;li&gt;A duplicate combination of option values.&lt;/li&gt;
&lt;li&gt;A variant that exists in the baseline but disappeared from the working file.&lt;/li&gt;
&lt;li&gt;A new row that has no SKU, barcode, or other deliberate identity.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Do not delete a row merely because it looks repetitive. Repeated Handles are normal when one product has multiple variants; the risk is an unintended change to the group structure.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Separate formatting fixes from catalog decisions
&lt;/h2&gt;

&lt;p&gt;Normalize obvious formatting issues, but review catalog decisions manually. Prices should use a dot as the decimal separator and should not include currency symbols. Be careful with blank cells in an update file: a blank may be interpreted differently from “leave this field unchanged,” depending on the import workflow.&lt;/p&gt;

&lt;p&gt;For a price-only change, keep the option and variant identity columns intact. Avoid rebuilding the whole product row when a smaller update file is enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Test a small, representative batch
&lt;/h2&gt;

&lt;p&gt;Choose a few products that cover the risky cases: one single-variant product, one product with two options, and one product with several variants. Preview that batch first, then compare:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;number of products shown,&lt;/li&gt;
&lt;li&gt;number of variants per product,&lt;/li&gt;
&lt;li&gt;option names and values,&lt;/li&gt;
&lt;li&gt;SKUs and barcodes,&lt;/li&gt;
&lt;li&gt;intended price changes only.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the preview count is surprising, stop before importing the full catalog.&lt;/p&gt;

&lt;p&gt;For a browser-side first pass over a Shopify-shaped CSV, the &lt;a href="https://shopify-csv.aivismonitor.com/shopify-csv-variant-error-checker" rel="noopener noreferrer"&gt;Shopify CSV Variant Error Checker&lt;/a&gt; can flag structural issues before you prepare the smaller test batch. It does not write to Shopify, and the final import still requires your review in Shopify admin.&lt;/p&gt;

&lt;p&gt;The key checkpoint is simple: export, compare by Handle and variant identity, test a small batch, and only then import the full update.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Before Stocky Goes Read-Only: A Safer CSV Export Checklist</title>
      <dc:creator>王磊</dc:creator>
      <pubDate>Mon, 20 Jul 2026 01:36:45 +0000</pubDate>
      <link>https://dev.to/_172c9b2760d6c5bc1e8966/before-stocky-goes-read-only-a-safer-csv-export-checklist-idl</link>
      <guid>https://dev.to/_172c9b2760d6c5bc1e8966/before-stocky-goes-read-only-a-safer-csv-export-checklist-idl</guid>
      <description>&lt;p&gt;Stocky’s shutdown creates a data problem that is easy to underestimate. A clean purchase-order CSV is useful, but it may not preserve the context behind the numbers: supplier notes, receipt dates, partial deliveries, historical costs, lead times, and reorder decisions.&lt;/p&gt;

&lt;p&gt;Before August 31, treat the export as an archive project, not just a one-time migration.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Export every source while access still works
&lt;/h2&gt;

&lt;p&gt;Save the raw files before transforming anything:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Purchase orders, including draft, confirmed, archived, and unarchived records&lt;/li&gt;
&lt;li&gt;Supplier and vendor data&lt;/li&gt;
&lt;li&gt;Stock counts, inventory adjustments, and transfer reports&lt;/li&gt;
&lt;li&gt;Current costs and any report that contains historical or manually adjusted costs&lt;/li&gt;
&lt;li&gt;Receipt details, especially received dates and partial-receipt status&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keep the original JSON or CSV untouched and date-stamped. A flattened worksheet is a working copy, not a replacement for the source export.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Check whether the export is complete
&lt;/h2&gt;

&lt;p&gt;If you use an API export, page through the result until no records remain. A single response can look valid while containing only the first page. Keep a simple count of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Purchase orders exported&lt;/li&gt;
&lt;li&gt;Line items exported&lt;/li&gt;
&lt;li&gt;Orders by status&lt;/li&gt;
&lt;li&gt;Orders with a supplier, SKU, cost, location, and receipt state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Round-number batches are worth investigating. So are missing statuses, missing locations, and a sudden drop in line-item counts.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Preserve the fields that CSVs often flatten
&lt;/h2&gt;

&lt;p&gt;For each purchase-order line, keep the PO number, supplier, SKU, title, ordered quantity, received quantity or receipt state, unit cost, location, and status. Store notes and dates in separate columns instead of combining them into one description field.&lt;/p&gt;

&lt;p&gt;If an export has no explicit received quantity, do not invent one. Use the available receipt date and item status as evidence, then mark partial or unconfirmed lines for manual review.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Build a small truth set
&lt;/h2&gt;

&lt;p&gt;Pick a few known purchase orders:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;One fully received order&lt;/li&gt;
&lt;li&gt;One partially received order&lt;/li&gt;
&lt;li&gt;One with a cost adjustment&lt;/li&gt;
&lt;li&gt;One with supplier or PO notes&lt;/li&gt;
&lt;li&gt;One with multiple locations, if applicable&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Compare those records against the exported worksheet. This catches missing context before you trust the full archive.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Keep the handoff reviewable
&lt;/h2&gt;

&lt;p&gt;Before recreating anything in another system, filter for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Missing SKU, supplier, cost, or location&lt;/li&gt;
&lt;li&gt;Ordered quantity greater than received quantity&lt;/li&gt;
&lt;li&gt;Missing receipt dates&lt;/li&gt;
&lt;li&gt;Duplicate PO numbers or duplicate line identities&lt;/li&gt;
&lt;li&gt;Supplier notes or historical-cost fields that did not survive&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A local browser-side option is the &lt;a href="https://shopify-csv.aivismonitor.com/stocky-purchase-order-api-csv-exporter" rel="noopener noreferrer"&gt;Stocky purchase-order JSON to CSV exporter&lt;/a&gt;. It accepts a JSON export you provide, flattens purchase orders and line items into a review worksheet, and keeps likely pagination, ambiguous receipts, and missing fields visible. It does not call Stocky, ask for credentials, upload the file, or write back to Shopify.&lt;/p&gt;

&lt;p&gt;The practical goal is simple: keep the raw export, prove the archive is complete, and only then decide what deserves a new purchase order, transfer, or migration step.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>A Safer Shopify Inventory Transfer Worksheet Before Receiving</title>
      <dc:creator>王磊</dc:creator>
      <pubDate>Sat, 18 Jul 2026 01:42:32 +0000</pubDate>
      <link>https://dev.to/_172c9b2760d6c5bc1e8966/a-safer-shopify-inventory-transfer-worksheet-before-receiving-3fh5</link>
      <guid>https://dev.to/_172c9b2760d6c5bc1e8966/a-safer-shopify-inventory-transfer-worksheet-before-receiving-3fh5</guid>
      <description>&lt;p&gt;Large Shopify inventory transfers are easiest to troubleshoot before anyone clicks “Receive.”&lt;/p&gt;

&lt;p&gt;When a transfer arrives in several deliveries, the receiving screen is only one part of the problem. The harder question is whether the spreadsheet still identifies the right variant, location, and quantity after the shipment was split. A clean receiving checklist prevents a quick workaround from creating a barcode or inventory problem later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with stable identity
&lt;/h2&gt;

&lt;p&gt;Keep at least one stable product identity on every row:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Variant ID when it is available&lt;/li&gt;
&lt;li&gt;Shopify SKU&lt;/li&gt;
&lt;li&gt;Barcode only when it is a real, existing barcode&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not replace a real UPC, EAN, or GTIN with a temporary value just to make a screen searchable. If the receiving workflow does not find a variant by SKU, first confirm whether it expects the barcode field, whether the SKU is duplicated, and whether the row belongs to the correct location. A temporary backfill can be useful only when the barcode field is genuinely unused and the change has been tested on a small group.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make the shipment boundary explicit
&lt;/h2&gt;

&lt;p&gt;A transfer that arrives in three deliveries should not be treated as one unexplained quantity. Add a shipment or receipt reference to your working sheet, then keep these fields together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transfer or shipment reference&lt;/li&gt;
&lt;li&gt;Source and destination location&lt;/li&gt;
&lt;li&gt;Variant ID, SKU, and barcode&lt;/li&gt;
&lt;li&gt;Expected quantity&lt;/li&gt;
&lt;li&gt;Quantity in this delivery&lt;/li&gt;
&lt;li&gt;Remaining quantity&lt;/li&gt;
&lt;li&gt;Review note&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The sum of the delivery quantities should equal the expected transfer quantity. If it does not, leave the row open for review instead of forcing the remaining amount into the latest shipment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate planning from receiving
&lt;/h2&gt;

&lt;p&gt;A transfer plan answers “how much should move?” Receiving answers “what actually arrived?” They should share the same identifiers, but they should not overwrite one another.&lt;/p&gt;

&lt;p&gt;For planning, compare destination stock against a minimum and target level. Cap the suggested transfer by source availability and flag any source shortfall. For receiving, record the delivered quantity and inspect variance against the plan. A planning worksheet can suggest a quantity; it cannot confirm that a carrier delivered it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review before applying changes
&lt;/h2&gt;

&lt;p&gt;Before importing or entering anything into Shopify:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check that every row has a destination location.&lt;/li&gt;
&lt;li&gt;Check that SKU and barcode values are not duplicated across unrelated variants.&lt;/li&gt;
&lt;li&gt;Confirm that quantities are numeric, non-negative, and expressed in the same unit.&lt;/li&gt;
&lt;li&gt;Keep variant rows together when you split a large file.&lt;/li&gt;
&lt;li&gt;Test one small product group or shipment before processing the full transfer.&lt;/li&gt;
&lt;li&gt;Save the reviewed before-and-after worksheet for reconciliation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For a browser-side worksheet that calculates suggested quantities from source stock, destination stock, and min/max rules, see the &lt;a href="https://shopify-csv.aivismonitor.com/shopify-inventory-transfer-csv-planner" rel="noopener noreferrer"&gt;Shopify inventory transfer CSV planner&lt;/a&gt;. It creates a local review file; it does not create Shopify transfers, change barcodes, or write inventory through an API.&lt;/p&gt;

&lt;p&gt;The safest transfer workflow is deliberately boring: preserve identity, separate shipments, validate quantities, and keep the reviewed file beside the final Shopify receipt record.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>A Safer CSV Review for Shopify Inventory Adjustments</title>
      <dc:creator>王磊</dc:creator>
      <pubDate>Thu, 16 Jul 2026 01:38:22 +0000</pubDate>
      <link>https://dev.to/_172c9b2760d6c5bc1e8966/a-safer-csv-review-for-shopify-inventory-adjustments-3hdk</link>
      <guid>https://dev.to/_172c9b2760d6c5bc1e8966/a-safer-csv-review-for-shopify-inventory-adjustments-3hdk</guid>
      <description>&lt;p&gt;Shopify’s newer inventory adjustment flow is more explicit about why stock changes. That is useful for reporting, but it also makes a quick “type -3 and move on” workflow easy to misunderstand.&lt;/p&gt;

&lt;p&gt;A safer approach is to review the adjustment file before applying changes in the admin.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to check first
&lt;/h2&gt;

&lt;p&gt;Before changing a quantity, keep these fields together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SKU or Variant ID&lt;/li&gt;
&lt;li&gt;Location&lt;/li&gt;
&lt;li&gt;Previous quantity&lt;/li&gt;
&lt;li&gt;New quantity&lt;/li&gt;
&lt;li&gt;Adjustment reason&lt;/li&gt;
&lt;li&gt;Note, operator label, and timestamp when available&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The previous and new quantities are more reliable than a bare positive or negative number. They let you calculate the actual delta and spot a row that would increase stock when you intended to remove it.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical review sequence
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Export a fresh inventory or adjustment report. Keep the original export unchanged so you have a reference copy.&lt;/li&gt;
&lt;li&gt;Confirm that every row has a SKU or Variant ID and a location. A quantity without an identifier is not safe to apply.&lt;/li&gt;
&lt;li&gt;Compare previous quantity with new quantity. For a removal, the new value should be lower; for a receipt or correction, it should be higher.&lt;/li&gt;
&lt;li&gt;Require a reason such as damaged, theft, cycle count, receiving discrepancy, or transfer. Add a short note when the reason alone is not enough context.&lt;/li&gt;
&lt;li&gt;Look for non-numeric quantities and duplicate rows. A duplicate adjustment can quietly double the intended change.&lt;/li&gt;
&lt;li&gt;Test one known SKU in Shopify first and read the preview. If the preview moves in the wrong direction, stop and fix the source row.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For a browser-side worksheet that calculates the delta, flags missing reasons or quantities, and highlights possible duplicate events, see the &lt;a href="https://shopify-csv.aivismonitor.com/shopify-inventory-adjustment-reason-audit" rel="noopener noreferrer"&gt;Shopify inventory adjustment reason audit&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apply the reviewed change manually
&lt;/h2&gt;

&lt;p&gt;In Shopify admin, open Products → Inventory, select the Available quantity, and use the adjustment flow for the relevant location and destination. Add the reason that matches the event, then confirm the preview before saving.&lt;/p&gt;

&lt;p&gt;The worksheet is a review aid, not an API writer. Keep the exported audit trail with the original report so a later stock-take or accounting review can explain what changed and why.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>A CSV Audit Before Shopify Inventory Adjustments</title>
      <dc:creator>王磊</dc:creator>
      <pubDate>Mon, 13 Jul 2026 01:37:19 +0000</pubDate>
      <link>https://dev.to/_172c9b2760d6c5bc1e8966/a-csv-audit-before-shopify-inventory-adjustments-o87</link>
      <guid>https://dev.to/_172c9b2760d6c5bc1e8966/a-csv-audit-before-shopify-inventory-adjustments-o87</guid>
      <description>&lt;p&gt;Shopify’s newer inventory adjustment flow is fine for a one-off correction. It becomes harder to review when the file contains damaged stock, cycle counts, receiving discrepancies, or transfers across several locations.&lt;/p&gt;

&lt;p&gt;A small CSV audit gives the change a reason before anyone applies it.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Start with a clean adjustment export
&lt;/h2&gt;

&lt;p&gt;Prepare one row per adjustment with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SKU or Variant ID&lt;/li&gt;
&lt;li&gt;Location&lt;/li&gt;
&lt;li&gt;Previous quantity&lt;/li&gt;
&lt;li&gt;New quantity&lt;/li&gt;
&lt;li&gt;Reason&lt;/li&gt;
&lt;li&gt;Note&lt;/li&gt;
&lt;li&gt;Operator label&lt;/li&gt;
&lt;li&gt;Timestamp&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keep the operator label non-personal if the file will be shared. The goal is an explainable event, not a copy of every admin detail.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Calculate the quantity delta
&lt;/h2&gt;

&lt;p&gt;For every row, calculate: delta = new quantity - previous quantity.&lt;/p&gt;

&lt;p&gt;A negative delta may be damage, shrinkage, a count correction, or a transfer out. A positive delta may be receiving, a count correction, or a transfer in. The number alone does not explain the event, so do not throw away the reason column.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Flag missing context before import
&lt;/h2&gt;

&lt;p&gt;Review rows where:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;SKU, Variant ID, or location is blank.&lt;/li&gt;
&lt;li&gt;Previous or new quantity is not numeric.&lt;/li&gt;
&lt;li&gt;The reason is empty or too generic.&lt;/li&gt;
&lt;li&gt;The timestamp is missing for a repeated adjustment.&lt;/li&gt;
&lt;li&gt;The same identity, quantities, reason, and timestamp appear more than once.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This catches the most expensive mistake: applying a valid-looking quantity twice because two rows had no useful context.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Keep the audit separate from the Shopify action
&lt;/h2&gt;

&lt;p&gt;A browser-side worksheet should prepare and explain the adjustment. It should not silently write inventory through an API. After reviewing the exceptions, apply the approved changes manually in Shopify Admin and keep the exported worksheet with the stock-count or receiving record.&lt;/p&gt;

&lt;p&gt;For a ready-made local worksheet, the &lt;a href="https://shopify-csv.aivismonitor.com/shopify-inventory-adjustment-reason-audit" rel="noopener noreferrer"&gt;Shopify inventory adjustment reason and audit-trail worksheet&lt;/a&gt; calculates the delta, flags missing reasons and duplicate events, and exports a review file without uploading the CSV.&lt;/p&gt;

</description>
      <category>shopify</category>
    </item>
    <item>
      <title>A Safer Way to Change Shopify Variant Prices by CSV</title>
      <dc:creator>王磊</dc:creator>
      <pubDate>Sat, 11 Jul 2026 01:44:37 +0000</pubDate>
      <link>https://dev.to/_172c9b2760d6c5bc1e8966/a-safer-way-to-change-shopify-variant-prices-by-csv-16d3</link>
      <guid>https://dev.to/_172c9b2760d6c5bc1e8966/a-safer-way-to-change-shopify-variant-prices-by-csv-16d3</guid>
      <description>&lt;p&gt;Bulk price changes look simple: export products, edit the price column, and import the file again. The risky part is that a product CSV can carry more variant structure than the price change itself.&lt;/p&gt;

&lt;p&gt;Here is a safer workflow for a recurring price update.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Start with a fresh export
&lt;/h2&gt;

&lt;p&gt;Export the products immediately before the change and keep the untouched file as your recovery baseline. Do not build the update from an old spreadsheet or from a file that has already been edited several times.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Define the smallest change set
&lt;/h2&gt;

&lt;p&gt;Decide whether you are changing only Variant Price, or also Compare At Price. Keep the scope explicit. If a column is not part of the change, do not fill it with guessed values or copied blanks.&lt;/p&gt;

&lt;p&gt;A blank cell in an included column can be interpreted as an instruction to replace existing data. That is why a smaller update file is easier to review than a full catalog export with unrelated edits.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Match variants by stable identity
&lt;/h2&gt;

&lt;p&gt;Use Variant SKU or barcode as the primary check, then verify the Handle and option values. Titles are not a safe identity because two products can have similar names, and one product can have several variants.&lt;/p&gt;

&lt;p&gt;Before importing, check for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;duplicate SKUs or barcodes&lt;/li&gt;
&lt;li&gt;duplicate option combinations under one Handle&lt;/li&gt;
&lt;li&gt;rows whose Handle changed unexpectedly&lt;/li&gt;
&lt;li&gt;a price value that uses a currency symbol or a comma decimal separator&lt;/li&gt;
&lt;li&gt;compare-at prices that are lower than the new selling price&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Test a tiny sample
&lt;/h2&gt;

&lt;p&gt;Create a copy containing one or two products, import it, and confirm the result in Shopify. Re-export those products and compare the new file with the baseline. This catches matching and overwrite problems before they affect the entire catalog.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Review the result, not just the success message
&lt;/h2&gt;

&lt;p&gt;After the full import, check the confirmation details and compare another export with the baseline. Look at the number of variants per product, SKU/barcode identity, price, and compare-at price. A successful upload message only confirms that Shopify accepted the file; it does not prove that the intended rows were the only rows changed.&lt;/p&gt;

&lt;p&gt;For a row-by-row preview of price changes before importing, I use the &lt;a href="https://shopify-csv.aivismonitor.com/shopify-csv-bulk-price-update-audit" rel="noopener noreferrer"&gt;Shopify CSV bulk price update audit&lt;/a&gt;. It is still important to keep the original export and verify a small sample in Shopify.&lt;/p&gt;

&lt;p&gt;The main rule is simple: treat a price CSV as a product update file, not as a plain spreadsheet of numbers. Preserve the variant structure, make the change set narrow, and verify the result with a second export.&lt;/p&gt;

</description>
      <category>tutorial</category>
    </item>
    <item>
      <title>Check Variant MPNs Before Sending a Shopify Feed</title>
      <dc:creator>王磊</dc:creator>
      <pubDate>Thu, 09 Jul 2026 01:44:27 +0000</pubDate>
      <link>https://dev.to/_172c9b2760d6c5bc1e8966/check-variant-mpns-before-sending-a-shopify-feed-5chp</link>
      <guid>https://dev.to/_172c9b2760d6c5bc1e8966/check-variant-mpns-before-sending-a-shopify-feed-5chp</guid>
      <description>&lt;p&gt;When variant-level MPNs do not show up in Google Merchant Center, I would not start by editing every product again. The safer first step is to prove where the value disappears.&lt;/p&gt;

&lt;p&gt;A practical checklist:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Export the Shopify product data you use as the source of truth.&lt;/li&gt;
&lt;li&gt;Keep the variant identity columns together: Handle, Variant SKU, barcode or GTIN, option values, and any Google or app-specific MPN field you maintain.&lt;/li&gt;
&lt;li&gt;Pick a few affected products with multiple variants and compare each variant row against the item IDs shown in Merchant Center.&lt;/li&gt;
&lt;li&gt;Separate three cases: MPN is missing in Shopify, MPN exists in Shopify but is not submitted, or Merchant Center receives it but groups the item differently.&lt;/li&gt;
&lt;li&gt;Only after that, decide whether a supplemental feed is enough or whether the product data needs cleanup first.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The main mistake is treating a parent product as the unit of review. For feed problems, the variant row is usually the unit that matters. If the same product has ten sizes or colors, one clean parent-level value does not prove that every submitted item has the right manufacturer part number.&lt;/p&gt;

&lt;p&gt;I keep this kind of check in a spreadsheet-friendly format: one row per variant, one column for the Shopify-side value, one for the Merchant Center-side value, and a status column for missing, mismatch, duplicate, or ready. That makes it much easier to hand the issue to a feed app, a developer, or a supplemental-feed workflow without guessing.&lt;/p&gt;

&lt;p&gt;If you want a browser-side worksheet for that comparison, I use this local variant MPN audit as a starting point: &lt;a href="https://shopify-csv.aivismonitor.com/shopify-google-mpn-variant-feed-audit" rel="noopener noreferrer"&gt;https://shopify-csv.aivismonitor.com/shopify-google-mpn-variant-feed-audit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The useful output is not just a cleaned value. It is a short list of variants where the identifier story is incomplete, so you can fix the right rows before another feed sync.&lt;/p&gt;

</description>
      <category>shopify</category>
      <category>ecommerce</category>
      <category>google</category>
      <category>data</category>
    </item>
    <item>
      <title>Check Variant Rows Before Trusting a Shopify CSV Import Count</title>
      <dc:creator>王磊</dc:creator>
      <pubDate>Tue, 07 Jul 2026 01:37:27 +0000</pubDate>
      <link>https://dev.to/_172c9b2760d6c5bc1e8966/check-variant-rows-before-trusting-a-shopify-csv-import-count-12db</link>
      <guid>https://dev.to/_172c9b2760d6c5bc1e8966/check-variant-rows-before-trusting-a-shopify-csv-import-count-12db</guid>
      <description>&lt;p&gt;Shopify's product import preview can feel wrong when the number it shows is higher than the number of products you expected. The first thing I would check is not the file size or the upload screen. It is the row model in the CSV.&lt;/p&gt;

&lt;p&gt;A Shopify product CSV is not one row equals one product. A product with three color or size variants can legitimately occupy several rows. Extra image rows can also share the same Handle. That means a preview count can look inflated even when Shopify is only reading variant rows, image rows, or grouped rows under the same product handle.&lt;/p&gt;

&lt;p&gt;Here is the quick preflight I use before retrying the import:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sort by Handle, then scan each group together. One Handle should represent one product family, not several unrelated products.&lt;/li&gt;
&lt;li&gt;Check whether rows with the same Handle are true variants. Option names and values should make sense across the group.&lt;/li&gt;
&lt;li&gt;Look for blank Handle cells. A blank Handle on a continuation row can be valid for images, but it is risky if the row also contains product or variant data.&lt;/li&gt;
&lt;li&gt;Count distinct Handles separately from total CSV rows. The row count is often closer to variants plus images, not product count.&lt;/li&gt;
&lt;li&gt;Review duplicate Handles where titles, vendors, or product categories suddenly change. That usually means two products were accidentally merged.&lt;/li&gt;
&lt;li&gt;Test a small batch first. Ten grouped products are easier to inspect than a full catalog import.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the CSV came from a supplier or migration tool, I would also check whether spreadsheet edits changed quote marks, boolean values, or price cells while you were sorting. Those secondary changes can make the second import attempt harder to understand than the first.&lt;/p&gt;

&lt;p&gt;For a browser-side check, I use this Shopify CSV import fixer to group Handles and surface import blockers before uploading again: &lt;a href="https://shopify-csv.aivismonitor.com/shopify-csv-import-fixer" rel="noopener noreferrer"&gt;https://shopify-csv.aivismonitor.com/shopify-csv-import-fixer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The key point is to separate three numbers before you panic: total rows, distinct product Handles, and actual variant rows. Once those are separate, the preview usually becomes easier to explain, and the risky rows are much easier to fix.&lt;/p&gt;

</description>
      <category>ecommerce</category>
    </item>
    <item>
      <title>Export Stocky Purchase Orders Before the Shutdown</title>
      <dc:creator>王磊</dc:creator>
      <pubDate>Sun, 05 Jul 2026 01:38:26 +0000</pubDate>
      <link>https://dev.to/_172c9b2760d6c5bc1e8966/export-stocky-purchase-orders-before-the-shutdown-8aa</link>
      <guid>https://dev.to/_172c9b2760d6c5bc1e8966/export-stocky-purchase-orders-before-the-shutdown-8aa</guid>
      <description>&lt;p&gt;Stocky replacement planning gets easier if you save the data first.&lt;/p&gt;

&lt;p&gt;Shopify merchants looking at the Stocky sunset usually jump straight to "what app should replace it?" That is the right question later. The urgent question is simpler: what evidence can you still export now?&lt;/p&gt;

&lt;p&gt;Before choosing a new inventory system, make a local checkpoint of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;purchase order history&lt;/li&gt;
&lt;li&gt;received item quantities&lt;/li&gt;
&lt;li&gt;supplier names and lead-time notes&lt;/li&gt;
&lt;li&gt;SKU, barcode, cost, tax, and location columns&lt;/li&gt;
&lt;li&gt;current inventory reports you use to calculate reorders&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not assume the next tool can reconstruct this from partial exports. A clean CSV or JSON snapshot lets you compare future reorder suggestions against what Stocky actually held.&lt;/p&gt;

&lt;p&gt;A practical review flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Export Stocky purchase order and inventory data while the old surface is still available.&lt;/li&gt;
&lt;li&gt;Keep an untouched copy as evidence.&lt;/li&gt;
&lt;li&gt;Flatten purchase-order lines into one row per item: SKU, title, ordered quantity, received quantity, cost, location, and status.&lt;/li&gt;
&lt;li&gt;Mark fields that Stocky does not expose clearly instead of guessing them.&lt;/li&gt;
&lt;li&gt;Build the new PO or reorder worksheet from the reviewed data, not from memory.&lt;/li&gt;
&lt;li&gt;Keep supplier contact details in a separate manual spreadsheet if Stocky does not export them.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For the PO-history checkpoint, a browser-side helper such as &lt;a href="https://shopify-csv.aivismonitor.com/stocky-purchase-order-api-csv-exporter" rel="noopener noreferrer"&gt;Stocky PO JSON to Shopify CSV exporter&lt;/a&gt; can flatten exported Stocky purchase-order data into a review worksheet before you test the next workflow.&lt;/p&gt;

&lt;p&gt;This will not replace a full inventory system or write anything back to Shopify. The value is narrower: get historical PO data into a shape you can audit before rebuilding reorder and receiving processes somewhere else.&lt;/p&gt;

</description>
      <category>ecommerce</category>
    </item>
    <item>
      <title>When One Shopify CSV Row Hits a File Reference Limit</title>
      <dc:creator>王磊</dc:creator>
      <pubDate>Fri, 03 Jul 2026 01:40:17 +0000</pubDate>
      <link>https://dev.to/_172c9b2760d6c5bc1e8966/when-one-shopify-csv-row-hits-a-file-reference-limit-1b7h</link>
      <guid>https://dev.to/_172c9b2760d6c5bc1e8966/when-one-shopify-csv-row-hits-a-file-reference-limit-1b7h</guid>
      <description>&lt;p&gt;A Shopify CSV import can fail even when the file is tiny. If the error says &lt;code&gt;Validation failed: Cannot add more than 10000 references to a file&lt;/code&gt;, the first thing to check is not the number of rows, the 15MB CSV limit, or whether commas are escaped correctly.&lt;/p&gt;

&lt;p&gt;That wording usually points at one referenced file. A single product image, file object, or metafield file reference may already be reused across a very large part of the catalog. When the import tries to attach that same file again, Shopify rejects the row because the file has hit a reference ceiling.&lt;/p&gt;

&lt;p&gt;A practical triage flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reproduce with the smallest CSV possible. If one row still fails, stop splitting the whole catalog and inspect the referenced file columns.&lt;/li&gt;
&lt;li&gt;Check which column is involved. Common suspects are &lt;code&gt;Image Src&lt;/code&gt;, &lt;code&gt;Variant Image&lt;/code&gt;, a custom file metafield, or a list-style file reference exported from another workflow.&lt;/li&gt;
&lt;li&gt;Look for the same file URL repeated across many rows. If hundreds or thousands of variants point at the exact same asset, the CSV may be structurally valid but operationally unsafe.&lt;/li&gt;
&lt;li&gt;Test a fresh file copy or a unique replacement URL for one product. If that row imports, the issue is probably file reuse rather than CSV formatting.&lt;/li&gt;
&lt;li&gt;Keep a separate review worksheet for rows that need replacement files. Do not bulk-replace everything blindly, because a shared image can be intentional for variants.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the suspect column is image-related, a useful first pass is checking whether the CSV contains public, direct, reachable image URLs before you decide what needs replacing: &lt;a href="https://shopify-csv.aivismonitor.com/shopify-csv-image-url-reachability-checker" rel="noopener noreferrer"&gt;https://shopify-csv.aivismonitor.com/shopify-csv-image-url-reachability-checker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That kind of check will not remove Shopify's platform reference limit. It helps narrow the problem to the right column and separate broken URLs from repeated references. If the column is a metafield file reference instead of a product image, treat it as a separate cleanup task: identify the repeated file, create replacement assets where appropriate, and retest with a small import before touching the full catalog.&lt;/p&gt;

&lt;p&gt;The main lesson is to read the error literally. A one-line CSV can still fail when that one line points at a file that has already been attached too many times.&lt;/p&gt;

</description>
      <category>tutorial</category>
    </item>
    <item>
      <title>A CSV Check Before Another Merchant Center Review</title>
      <dc:creator>王磊</dc:creator>
      <pubDate>Wed, 01 Jul 2026 01:38:29 +0000</pubDate>
      <link>https://dev.to/_172c9b2760d6c5bc1e8966/a-csv-check-before-another-merchant-center-review-2man</link>
      <guid>https://dev.to/_172c9b2760d6c5bc1e8966/a-csv-check-before-another-merchant-center-review-2man</guid>
      <description>&lt;p&gt;Merchant Center reviews can mix two very different problems: product data that is objectively inconsistent, and trust signals that Google reviews at the store level. If the warning says misrepresentation, a CSV cleanup is not the whole fix. Still, it is worth removing the spreadsheet-level contradictions before asking for another review or paying someone to audit the site.&lt;/p&gt;

&lt;p&gt;Here is the preflight I use before changing theme copy or submitting another request:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Export the Shopify product data or the feed rows you plan to send.&lt;/li&gt;
&lt;li&gt;Check that each sellable variant has a brand or vendor value, a usable GTIN or barcode when the product requires one, a positive price, and an active/published status.&lt;/li&gt;
&lt;li&gt;Separate products that are intentionally unpublished, out of stock, drafts, or blocked from a sales channel so they do not look like missing products.&lt;/li&gt;
&lt;li&gt;Compare a small sample of live product pages against the feed values: title, price, currency, availability, and variant identity.&lt;/li&gt;
&lt;li&gt;Keep a simple change log of what was fixed before the next review, especially if multiple people or supplier files touch the catalog.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The useful part of this pass is not that it proves the store is compliant. It does not. The useful part is that it narrows the problem. If your export is missing brand values, has blank barcodes, has zero prices, or still includes inactive variants, fix that first. If the product data already looks consistent, then the next work is probably on policies, contact details, business identity, landing-page content, or supplier/feed freshness.&lt;/p&gt;

&lt;p&gt;For a browser-side worksheet, I use &lt;a href="https://shopify-csv.aivismonitor.com/shopify-google-merchant-center-missing-products-csv-audit" rel="noopener noreferrer"&gt;this Shopify Merchant Center CSV audit&lt;/a&gt; to check Shopify export fields such as vendor/brand, barcode/GTIN, price, status, and MPN before deeper review work. It does not log into Google, submit an appeal, or make policy claims. It just gives you a row-level list of product data issues to clear first.&lt;/p&gt;

&lt;p&gt;That boundary matters. A clean CSV will not fix weak trust pages or a feed that disagrees with the live storefront tomorrow. But it gives you a smaller, cleaner checklist before you spend time on the harder review questions.&lt;/p&gt;

</description>
      <category>googlemerchant</category>
    </item>
    <item>
      <title>A CSV Check for Shopify Stock That Exists but Still Will Not Sell</title>
      <dc:creator>王磊</dc:creator>
      <pubDate>Mon, 29 Jun 2026 01:37:52 +0000</pubDate>
      <link>https://dev.to/_172c9b2760d6c5bc1e8966/a-csv-check-for-shopify-stock-that-exists-but-still-will-not-sell-4mih</link>
      <guid>https://dev.to/_172c9b2760d6c5bc1e8966/a-csv-check-for-shopify-stock-that-exists-but-still-will-not-sell-4mih</guid>
      <description>&lt;p&gt;Multi-location inventory can fail in a quiet way: the stock count looks positive, but the product still cannot sell from one location. In Shopify terms, quantity and location activation are separate checks.&lt;/p&gt;

&lt;p&gt;Before changing the same quantity again, I would audit the rows in this order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Confirm the row has a stable product identity: SKU or variant ID.&lt;/li&gt;
&lt;li&gt;Compare On hand against Available for the same location.&lt;/li&gt;
&lt;li&gt;Flag rows where On hand is above zero but Available is blank or zero.&lt;/li&gt;
&lt;li&gt;Check whether the location is actually active for that variant.&lt;/li&gt;
&lt;li&gt;Separate receiving problems from activation problems before importing another quantity change.&lt;/li&gt;
&lt;li&gt;Test the fix on a small set of variants before doing a bulk edit.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A useful worksheet has one line per variant and location, with SKU, variant ID, location, On hand, Available, activation state, and a short recommended action. That keeps the decision visible before anyone touches live inventory.&lt;/p&gt;

&lt;p&gt;For a local browser-side pass, this checker can turn an inventory or location CSV into that exception worksheet: &lt;a href="https://shopify-csv.aivismonitor.com/shopify-inventory-location-activation-audit" rel="noopener noreferrer"&gt;Shopify inventory location activation audit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The important boundary is that this kind of CSV audit should not silently activate inventory or push changes through an API. It should show which variants need review, then let the merchant decide the bulk edit or manual activation path in Shopify.&lt;/p&gt;

</description>
      <category>shopify</category>
      <category>ecommerce</category>
      <category>csv</category>
      <category>inventory</category>
    </item>
  </channel>
</rss>
