File & mapping
File integrity, broken CSV quotes, duplicate headers, merged cells, formulas, hidden rows, missing mappings, and identifier precision.
Map the columns. Check the actual values. Resolve the exceptions.
Export a file built for your Shopify or WooCommerce importer.
Google attributes stay in the same product file. Unavailable or unsupported fields are reported; the app never invents barcodes, gender, age group, or a taxonomy assignment. A price comparison needs a sufficiently similar, explicitly identified group.
These are your supplied business rules, not legal or platform defaults. Date checks also use the current time. A launch-readiness sheet does not activate or verify a live promotion.
Drop a file here, or choose one below.
Up to 10 MB · 5,000 data rows · 200 columns · .xlsx, .csv, .tsvChoose a file to begin. Your original file will not be changed.
Use a store export or supplier master to check identity and values. Matches require a unique SKU, store ID, email, or category identity. A reference is evidence you provide, not a live store connection.
For deals, a reference workbook can include Products, Stores, Channels, Agreements, CategoryPolicies, Approvals, ChannelSnapshots, and ComplianceRules. Download the fictional reference workbook. Keep its sheet names and headers; enter only evidence you have checked.
No reference loaded. External values are not verified.
Review the suggested matches. Ambiguous columns stay unassigned until you choose.
Resolve blockers. Review warnings. Keep a record of every decision.
Use this only after reading the warnings. It cannot override blockers. Changing data, mapping, references, or destination clears these decisions.
Choose a category that already exists in your file or reference, or enter a confirmed category. No invented taxonomy is assigned automatically.
Preview the exact columns. Export only after the checks and review are complete.
A passed check is not a guarantee of commercial accuracy. Review the destination’s preview and test a small import first. This app exports files; it does not connect to your store or activate promotions.
Each result explains the concern, the affected rows, and what to do next.
File integrity, broken CSV quotes, duplicate headers, merged cells, formulas, hidden rows, missing mappings, and identifier precision.
Missing or invalid fields, money and quantities, barcode checks, consent, date order, price calculations, and unsafe cell content.
Duplicate identities, supplier and category conflicts, variants, unusual sibling prices, category hierarchies, and overlapping offers.
Required importer fields, supported structures, same-sheet Google attributes, omitted data, and checks that need a trusted reference.
Read the complete rule guide and limits ↓ · Warnings are review prompts, not automatic corrections.
Load these fictional sources in the workspace to try the real mapping, checks, editing, and export flow. Replace all sample data before any live import.
Keep identifiers as text. Source files are examples, not finished destination imports. Read the sample guide.
A practical guide to every step, the actual values being checked, and the limits of those checks. Download the manual · Download the rule catalog.
Use Back to Musa's Portfolio in the top menu to return to the main or Work portfolio you came from. The choice is remembered for this tab when browser storage is available. Direct visits default to the main portfolio.
Limits are 10 MB per file, 5,000 nonempty data rows, 200 columns, and 30 workbook sheets. Header rows can be selected from rows 1–50. Workbooks that expand beyond 80 MB, inconsistent archive sizes, ZIP64, streamed archive entries, macros, embedded files, password protection, and malformed CSV are rejected. Unsupported streamed or ZIP64 files can be saved again as a standard data-only XLSX or CSV; rejection does not prove malicious content. Old XLS files must first be saved as XLSX or UTF-8 CSV. Large or unusually structured files should be split into simple tables.
Automatic mapping compares column labels with known field names and aliases. An exact match and an alias suggestion are labeled separately. Ambiguous or duplicate names require a choice. Always distinguish regular price, sale price, cost, pack price, and a deal’s complete offer price.
Choose a source column for each destination field. The sample value under the selector helps distinguish similarly named columns. Use Show every available field to review less common fields, including IDs, variants, addresses, and Google attributes. Apply mapping rebuilds the records from the original sheet and clears earlier edits and review decisions. Unassigned source columns are preserved in the edited-source workbook and reported as omissions before an importer export.
Blank means unknown, not zero or false. The app does not invent names, prices, product families, barcodes, consent, or approvals. Fill evidence-backed blanks uses exact complete category paths found in the official bundled taxonomy and explicit Color, Size, Material, or Pattern variant options. It does not classify products from marketing language or guess gender and age. Existing nonblank values are never overwritten by this action.
Shopify product taxonomy is separate from a supplier’s category, a WooCommerce category, and a Shopify collection. The Shopify product category field has its own official category choices. A custom source label does not automatically become a valid Shopify taxonomy assignment. In the row editor, type part of a category path and choose the correct full path. Taxonomy membership confirms a recognized category, not that it is the correct classification for the product.
The optional reference upload accepts a store export or supplier master. Confirm its sheet, header row, and mappings before relying on it. Products match using compatible SKU, product ID, variant ID, and valid barcode evidence; customers by compatible store ID, address ID, or email; categories by an unambiguous ID, slug, or exact name-and-parent identity. Product names alone do not establish identity.
Conflicting reference matches block use of an ambiguous identity. Differences in names, brands, suppliers, categories, prices, costs, currencies, packs, addresses, or consent are shown for review. The app does not decide which document is newer or more authoritative.
Fill verified blanks copies only blank fields from a unique, compatible reference match. It preserves existing values and does not fill system IDs, customer consent, approval assertions, or approval references. Every copied value is recorded with its reference sheet and row. Review the reference’s accuracy and recency yourself; a local match is not independent verification against a live system.
For deals, a reference workbook can also provide Products, Stores, Channels, Agreements, CategoryPolicies, Approvals, ChannelSnapshots, and ComplianceRules. Use the downloadable reference example and keep its sheet names and field headers. Missing reference tables leave the corresponding controls explicitly Not checked. A claimed approval without supporting evidence is not treated as verified approval.
Apply and review the reference mapping before using its values. A product ID can represent several variants; it must be narrowed by compatible SKU/variant/barcode evidence to one row. Conflicting identifiers do not authorize choosing the first match. Product names alone never establish an update identity.
Fill verified blanks requires a unique compatible match. It preserves existing values and does not copy system IDs, customer marketing consent, or approval references. Supplied contradictory names, brand/supplier facts, currency, pack/unit context, tax/price basis, option structure, and customer addresses prevent automatic filling and need a human decision.
Money filling needs an explicit reference currency and, for products, an explicit reference pack quantity. Any pack, tax basis, price basis, or condition already supplied in the source must also have supporting reference context. Missing monetary context produces a REFERENCE_CONTEXT_INCOMPLETE finding and leaves money cells unfilled. The source-currency fallback does not become the reference's currency.
A local exact match does not establish recency, authority, live-store existence, or authenticity. Review every recorded copied value and its source row. Other blank fields can be filled only from compatible unique matches; a missing field is never a reason to invent an identifier or approval.
Blocker means the current output is unsafe or structurally invalid. Correct the value, correct the mapping, supply the required evidence, change the destination, or exclude the affected record. Blockers cannot be accepted away.
Warning means a value or assumption requires a human decision. Open the affected source row, investigate the concern, and either correct it or record a specific reason for keeping it. Review reasons must contain at least 12 characters and should state what was checked. The optional bulk review action records one reason for the remaining warnings; it does not bypass blockers.
Information explains a transformation or a limitation. Not checked is a coverage state: the app lacked the inputs needed to perform that control. It is not a passing result. Open Checks & coverage to see these limits and the reference-dependent promotion checks.
Every issue has a code and an explanation. Record-specific issues also identify affected fields and source rows. Mapped records can be searched, filtered, edited, restored to source values, or excluded from export. Exclusion is reversible and is listed in the review report. Select records to apply a confirmed category to several rows. Category choices come from the source, a trusted reference, or the official taxonomy appropriate to the target field.
Changing values, exclusions, mappings, references, destination, or comparison settings clears previous review decisions. Changing currency or number convention remaps source values and resets edits. Download the edited-source workbook before rebuilding the mapping if you need to keep those edits.
Product checks cover missing identity and sellable price, invalid or negative values, zero price, sale price above regular price, cost and margin concerns, stock and pack quantities, weight and units, supported conditions, currency codes, image URL syntax, and malformed or unsafe cell content. Create and update workflows have different requirements; omission during an update is not automatically interpreted as an instruction to clear a stored value.
Identity checks cover duplicate SKUs and IDs, inconsistent names or product facts under the same identity, shared barcodes, same names with different suppliers, brands or categories, and exact duplicate source rows. A matching name is a review candidate, never an automatic merge instruction. Different legitimate products can share a name, and different suppliers can offer the same product.
GTIN checks examine supported length and check digit. Leading zeros are preserved when supplied as text. A valid check digit does not establish barcode ownership or prove that the code belongs to that item. A spreadsheet that already lost zeros or long numeric digits must be corrected from its original source.
Variants are checked for missing or ambiguous parents, self-parenting and cycles, incompatible parent structure, repeated option combinations, duplicate option names, missing option values, and inconsistent family information. Unsupported variant structures block the chosen adapter rather than silently flattening products into incorrect rows.
Descriptions and source URLs are treated as data, not executed in the app. URL syntax does not establish that an image is reachable, publicly accessible, correct, or licensed. Inspect the destination’s image preview and rich-text handling before a production import.
An unusual price can be a valid number and still be a mistake. Comparisons require an explicit product family or parent relationship and compatible brand, currency, pack quantity, tax basis, condition, and price basis. Unknown context does not become an assumed match. Rows with conflicting identities are not reliable comparison evidence.
A candidate does not influence its own reference value. With fewer than two other suitable peers, the row is Not evaluated. With two to four peers, extreme prices outside half the lowest or twice the highest peer are flagged when the minimum absolute difference is also met. With at least five peers, robust median and median absolute deviation checks combine with the selected relative threshold and minimum difference. If all peer prices are the same, the relative threshold and minimum difference still provide a check.
Balanced sensitivity is 50% and the initial minimum difference is 5 currency units. These are visible review settings, not universal business limits. Change them to fit your catalog. The app never compares USD with EUR, converts a single item to a multipack without evidence, or changes an outlier price automatically. Premium variants, clearance items, and supplier differences may be intentional; explain that in the review reason.
Category checks cover missing names, invalid or conflicting slugs, duplicate identities, near-duplicate names, ambiguous or missing parents, self-parent links, and circular hierarchies. A missing parent may already exist in the store, so external existence remains unverified without an appropriate snapshot. Shopify collections and taxonomy categories are different concepts. Native product CSV importers are not general-purpose category-definition importers.
Customer checks cover missing identity, email syntax, duplicate or conflicting emails and IDs, suspicious phone values, country and postal context, incomplete addresses, and ambiguous marketing consent. A syntactically valid email or phone number is not confirmed reachable. Similar names do not justify merging customers.
Consent is never inferred from a purchase, a nonempty email address, or an empty cell. Unknown consent stays unknown and requires the destination’s appropriate handling. A Yes value is a source assertion, not legal evidence of permission. Do not use this app as a legal consent audit.
Customer exports can affect personal data. Keep files and reports private. Native Shopify customer overwrite behavior can replace existing customer data; sparse updates are blocked where the adapter cannot safely preserve omitted fields. Use the selective update option described in the destination note and take a backup first.
A deal row separates regular price per unit, units in the complete offer, any submitted regular offer total, and the submitted promotional offer total. Enter percentages as 20 for 20%, not 0.20 or 20%. Supported calculations include percent off, amount off the complete offer, fixed price, fixed bundle price, BOGO, and buy-X-get-Y discounts. Buy and get quantities must be explicit.
Money calculations use exact decimal fractions and half-up rounding to the currency’s minor unit, including currencies with zero or three decimal places. The app recalculates the complete regular offer, expected promotional total, discount amount, effective discount, cost, gross margin, entered fees, contribution, and contribution margin. It compares calculated totals with submitted totals instead of trusting a typed promotional price.
Missing costs and fees do not become zero. To assert that a particular fee is zero, enter 0. Gross margin and contribution margin are separate. Contribution includes the costs you supplied; it is not net profit and does not invent tax, returns, overhead, shipping, or vendor reimbursement. Negative contribution and a supplied margin-floor breach are flagged. No vendor subsidy is added to profit merely because a deal is marked vendor funded.
The House of Dank control families have been adapted without carrying over fictional business thresholds: required values; catalog identity; product/brand/category match; reference regular price; promotional math; category discount cap; margin; vendor agreement scope; vendor cap; dates and lead time; overlapping offers; exact stores and channels; inventory; channel parity; asset/approval evidence; and configured policies, limits, and stacking. Reference-dependent controls stay Not checked until their evidence is supplied.
Date checks use explicit time zones and validate ordering, offsets, daylight-saving transitions, and supplied lead-time or duration policies. Store and channel codes are matched as exact comma-separated tokens, not partial words. Inventory projections need confirmed scope, stock, baseline velocity, demand multiplier, and dates. Overlaps are checked within the supplied promotion data; existing live promotions outside that data are not known.
A deal output is a planning and QA sheet. Creating a promotion in Shopify or WooCommerce still requires the relevant native discount interface or promotion plugin. A BOGO rule cannot be activated by changing a product price column. Verify stacking, eligible cart lines, customer limits, schedules, taxes, and final checkout behavior in that system before launch.
Every choice below exports the same kind of reviewed planning sheet. None imports or activates a discount configuration. One calculated row describes an offer involving quantities of the same SKU; mixed-SKU baskets and the interactions between multiple discount tiers are not modeled.
| Choice | How to use the reviewed plan | What still needs checking |
|---|---|---|
| Shopify — Promotion planning sheet | Use the calculations to choose a native discount or an installed promotion app, then enter the reviewed rule there. | Select the exact products, customer eligibility, channels, schedule, and combination policy. This generic sheet is not a Shopify discount CSV. |
| WooCommerce — Promotion planning sheet | Decide whether the offer is a normal coupon or needs a discount extension, then transfer its reviewed inputs. | Coupon amount semantics, affected items, limits, and automatic-application behavior differ by system. |
| Shopify — Native discounts | In Discounts, create the relevant amount-off or Buy X Get Y rule, choose code/automatic method, and set the qualifying and discounted items, quantities, combinations, and dates. | Native Buy X Get Y does not automatically add the get item to the cart. Check store time zone and POS eligibility; test a qualifying and a nonqualifying cart. |
| Shopify — Bundler | Create the intended bundle or volume discount, choose real products and required quantities, and select percentage, amount off, or final bundle price. | Those three values mean different things. Confirm the installed plan, bundle conditions, priority, and the complete cart total. Do not use this single-SKU calculator as a mixed-product cost model. |
| Shopify — Discount Ninja | Configure the offer, then its trigger: audience, schedule, usage conditions, and combinations. | Verify Online Store checkout behavior and interactions with other promotions. A planning file does not change catalog prices or establish other-channel coverage. Vendor channel limits |
| WooCommerce — Native coupons | In Marketing → Coupons, set percentage, fixed-product, or fixed-cart type; then restrictions, limits, and schedule. | Fixed-product discounts apply per eligible item; fixed-cart discounts apply to the cart total. Native coupons do not automatically apply. BOGO/quantity-bundle rules need an extension. The selected expiry date is the first invalid day, so translate an inclusive plan end date deliberately. |
| WooCommerce — Flycart Discount Rules | Add a rule; choose product adjustment, bulk, bundle/set, or Buy X Get X/Y; configure filters, quantity counting, value, conditions, and repeat behavior. | For the same-SKU BOGO modeled here, review Buy X Get X. Confirm the Pro features needed by your selected rule and test threshold quantities and exclusions. |
| WooCommerce — Advanced Coupons | Create the BOGO coupon; define Customer Buys and Customer Gets, quantities, discount, and once/repeat limits. | Match the intended product/variation and review BOGO combination limits. Auto-apply needs corresponding Cart Conditions and the appropriate enabled feature; it is not caused by uploading this planning sheet. |
The app's date-only deal end includes the stated local day; timestamp ends use an exclusive boundary and need an explicit valid offset. Transfer these meanings into the selected promotion system instead of copying a date without checking its cutoff.
For a fixed discount, distinguish the complete offer amount from a per-item discount. The app's amount_off calculation subtracts from the complete offer. Compare the system's actual eligible cart total with the sheet's expected promotional total before launch.
Missing cost or fees remain unknown. Contribution includes only supplied costs and fees; it is not net profit. Vendor funding, tax, refunds, shipping, and overhead are not invented. Readiness flags and approved-looking reference rows remain assertions whose authenticity you must establish.
There is no separate Google feed destination. Choose the Google integration that is actually installed, then review the additional columns within the same product export. Unsupported populated values are reported rather than dropped silently.
Native Shopify CSV supports documented legacy Google Shopping fields, but the Google & YouTube channel does not use those legacy columns as its authoritative settings. Matrixify supports specific Google-shopping metafield conventions. WooCommerce integrations differ: Google for WooCommerce can use configured product attributes for supported fields, while other extensions have their own documented columns or metadata keys. Selecting an integration does not install it or configure its mapping rules.
The bundled Google category list is the official English list retrieved for this release. The bundled Shopify list is stable release v2026-08, not the repository’s unstable branch. Both have source and version metadata in the app’s data files. A category can be recognized by a list and still be unsuitable for the product. Choose its actual category using source evidence.
Create adapters use draft or unpublished status where the destination supports it. An importer preview and a successful file download do not prove a live store import succeeded. Guided mapping profiles need configuration in their plugin; they are not certified integrations with every version or add-on. Updates require a reliable destination identity; product names are not a safe overwrite key.
There are twelve product choices. “Documented format” means the app emits the supported native header structure. “Guided mapping” means it prepares meaningful source columns that you must map inside the selected plugin; it is not an invented plugin template or a certified store integration.
| Platform | Destination | Preparation and setup |
|---|---|---|
| Shopify | Native CSV | Documented product CSV. New products use draft/unpublished settings. Updates need an explicit existing handle and the actual option identities; preserve the intended product family. |
| Shopify | Matrixify | Documented Products sheet with explicit NEW/UPDATE commands and supported variant identities. Review product-versus-variant field scope and any separate files. |
| Shopify | Hextom Bulk Product Edit | Guided mapping. Choose the correct edit, add-product, or add-variant job and configure matching. |
| Shopify | Ablestar Bulk Product Editor | Guided mapping. Confirm its identifier column and whether changes belong to products or variants; use the appropriate creation/editing workflow. |
| Shopify | Stock Sync | Guided mapping. Add and Update jobs have different behavior; configure the actual match key and mapped fields. |
| Shopify | StoreRobo | Guided Custom CSV mapping. Confirm ID/Handle matching and publishing settings. |
| WooCommerce | Core CSV | Documented native product CSV. Explicit parents precede variations. A flat family of option rows must not silently become unrelated simple products. |
| WooCommerce | WebToffee | Guided Advanced import mapping. Confirm the installed edition; variations, metadata, and Excel features can require Pro. |
| WooCommerce | WP All Import | Guided mapping. Choose the import type, stable record identifier, existing-record match, and permitted updates. |
| WooCommerce | Product CSV Import Suite | Its own documented lowercase schema. Product and variation imports are separate; use the appropriate merge action for updates. |
| WooCommerce | Ultimate CSV Importer | Guided mapping to its WooCommerce module and product-type conventions. Confirm required Pro/module features. |
| WooCommerce | WP Sheet Editor | Guided Products spreadsheet mapping based on the actual store's available columns and matching settings. |
Read the official guide linked next to the selected destination. Download only a format that profile supports. A CSV-only importer does not gain Excel support because Excel opens its CSV.
Keep separate output files separate and import in the listed order. Different column sets deliberately preserve omitted update values; joining the files can introduce blank cells that clear data.
Standalone category choices are Matrixify Custom Collections and the mapped WP All Import taxonomy workflow. Shopify Custom Collections are flat collections, not editable Shopify taxonomy entries. Standalone customer choices are native Shopify creation, Matrixify, WP All Import with the required user/customer setup, and WooCommerce Customer CSV Import Suite mapping. Native WooCommerce product CSV is not a standalone customer or category importer.
Spreadsheet parsing, mapping, checks, and file generation happen in your browser. The app does not send source rows, customer data, or reference data to an AI service or a store. It uses locally hosted spreadsheet code and taxonomy lists. Normal page and static-asset requests still go to the website host.
Data and review decisions are held only in the current page session. They are not automatically saved to an account, database, or browser storage. Download your edited source and report before reloading or closing. Clear workspace removes the in-memory data; it cannot remove copies you downloaded or data retained elsewhere by your browser or operating system.
CSV cell values that could become spreadsheet formulas are checked. Excel formulas are not executed; only saved cached results can be read, and they require review. Error cells, missing cached results, uncertain numeric identifiers, and merged or hidden content receive explicit findings. Text-safe XLSX downloads retain strings as text. Do not open an unreviewed external CSV in a spreadsheet program that evaluates formulas.
If a file fails, read its error message and fix the source rather than forcing the import. Common fixes are saving as UTF-8 CSV, removing password protection, choosing the correct header row, unmerging cells, reducing unused formatted ranges, and restoring lost identifiers from the supplier’s original data.
The app does not execute source formulas. Cached formula results need review; absent/error results cannot supply trusted values. Formula-like output text is blocked, including provenance values such as a worksheet name. Accepting a warning is not a way to permit executable CSV content. Correct the intended plain text or source metadata deliberately; do not silently strip characters from an identifier.
An explicit source-value correction can resolve a current blocker while retaining the original parser finding as provenance information. Restoring the original value brings its applicable blocker back. Correction does not mean the original file was safe or verified.
CSV has no cell types. Import identifiers as Text when opening it in a spreadsheet application. Text-safe XLSX preserves strings as text, but cannot recover digits or leading zeros already lost in the original source.
Edited source is a recovery workbook, not an importer file. If several mapped fields share one source column and their edited values differ, the original shared column is retained and separate Prepared fields preserve the differing edits. Review those fields when mapping the recovery workbook again.
Some XLSX archive formats, including ZIP64 and streamed entries with data descriptors, are intentionally unsupported. If the app reports this format limitation, save a new standard data-only XLSX or UTF-8 CSV and retry. Rejection does not by itself prove that a workbook is malicious.
Sample sheets are fictional, designed to demonstrate both useful inputs and deliberate mistakes. Sample identifiers and check-digit-valid barcodes are not proof of assigned real-world identifiers. Never import sample customers, products, or promotions into a live store without replacing them with approved data.
Start with a clean sample, then load a mistakes sample to see the warnings. Categories, customers, products, and deals each have examples. The reference workbook demonstrates how optional evidence unlocks additional checks. A clean sample can still show review warnings about unknown business context, unmapped teaching columns, or importer setup; “clean” means its main demonstration values are intentional, not that every real-world fact is verified.
The release QA report records the actual test runs. Automated checks test the implemented logic, parsing and generated values; browser checks test the working user flow. They do not certify every plugin version, every possible spreadsheet, legal compliance, or a live store that has not been connected. The per-rule catalog below documents implemented findings and their practical limits.
The release QA record identifies the exact source version, completed test runs, failures, and remaining checks. Ten varied module rounds and exporter test groups cover specified cases; they are not ten live store imports and not a percentage guarantee that every possible error will be detected.
Module results, actual-file parsing/export checks, browser workflow checks, public deployment checks, and test-store import/re-export are separate evidence. Do not claim one from another. A code change needs the relevant tests rerun. An unfinished or unrun test must remain identified as such; missing external evidence remains Not checked.
These are implemented rule definitions, not a claim that every rule applies to every row. A control is useful only when the relevant fields or context exist.
| Code | Level | What to check and how to resolve it |
|---|---|---|
| RECORD_ID_DUPLICATE | blocker | Source row identifiers overlap Two records have the same review ID, making approvals and exclusion ambiguous. |
| STORE_ID_DUPLICATE | blocker | One store ID is used by multiple records A target entity must not receive ambiguous repeated rows. |
| IDENTIFIER_FORMAT | warning | Identifier formatting needs review Scientific notation or numeric coercion may have changed an identifier; lost digits are never reconstructed. |
| FORMULA_LIKE_TEXT | warning | A cell could be interpreted as a spreadsheet formula Preserve source text and use safe destination-aware handling; this module does not execute or silently prefix it. |
| DUPLICATE_ROW | warning | A complete record is repeated Identical data may produce repeated creates; continuation records are excluded. |
| UPDATE_REFERENCE_UNCHECKED | info | Existing-store matching was not checked No store snapshot was supplied, so existing identity and before-values are unverified. |
| UPDATE_BLANK_SEMANTICS | warning | Review how blank update cells are handled Omitted source values are not automatic instructions to clear existing data; the exporter must preserve update intent. |
| NAME_MISSING | blocker | Product name is missing A new product needs a sourced name, directly or from an explicit parent. |
| SKU_MISSING | warning | SKU is missing A SKU is useful for reliable matching; an importer may impose a stricter requirement. |
| MATCH_KEY_MISSING | blocker | An update has no stable target key Map an existing store ID, variant ID, SKU, handle, or kind-specific identity. |
| SKU_CONFLICT | blocker | The same mapped SKU appears in multiple records Supplier SKUs are scoped to suppliers; review collisions instead of using row order or silently merging. |
| HANDLE_CONFLICT | blocker | One product handle has conflicting titles A handle groups one product in applicable importers; do not silently select the first conflicting title. |
| NAME_SUPPLIER | warning | Same product name, different suppliers This may be legitimate multiple sourcing or different items; names alone do not prove identity. |
| NAME_CATEGORY | warning | Same product name, different categories Different category membership may be valid; review the full category sets and identifiers. |
| NAME_BRAND | warning | Same product name, different brands A shared name is weak evidence; verify brand and product identity. |
| NAME_PACK | warning | Same product name, different pack quantities Different packs can be distinct products and must not be compared or merged automatically. |
| NAME_MATCH_UNRESOLVED | warning | Same name without a confirmed variant relationship Review duplicate retail items, separate products, or supplier offers; no automatic merge. |
| GTIN_INVALID | warning | GTIN format or checksum is invalid Only syntax and check digit are tested; this does not verify GS1 assignment. |
| GTIN_REUSED | warning | A barcode is reused by different records Multiple offers may share a genuine barcode; resolve identity before counting them as independent price peers. |
| GTIN_CONFLICT | blocker | A barcode has conflicting brand or pack data Conflicting supplied identity facts need a reviewed decision; packaging-level exceptions require evidence. |
| MODEL_GTIN_CONFLICT | warning | A manufacturer model has different barcodes Matching brand/model/options/pack may have valid regional identifiers or a source error. |
| CATEGORY_MISSING | warning | Product category is missing Offer sourced category choices; do not invent a taxonomy value. |
| SHOPIFY_CATEGORY_MISSING | warning | Shopify standard product category is missing Source or Woo categories are not automatically Shopify taxonomy values; choose a supported target category. |
| PRICE_MISSING | blocker | Selling price is missing A new sellable product needs an explicit regular price under this app safety policy. |
| PRICE_INVALID | blocker | Price is invalid Use a finite nonnegative amount in the selected decimal style and safe monetary range. |
| PRICE_ZERO | warning | The product price is zero Confirm that free pricing is intentional; blank and zero are different. |
| PRICE_PRECISION | warning | Money has more than two decimal places Review the destination currency precision and rounding before export. |
| SALE_PRICE_INVALID | blocker | Sale price is invalid A supplied sale price must be finite, nonnegative, and safely representable. |
| SALE_NOT_LOWER | warning | Sale price is not lower than regular price Review swapped columns or an intentional no-discount state. |
| SALE_PRICE_ZERO | warning | Sale price makes the item free A supplied zero sale price is different from no sale price. |
| COST_INVALID | blocker | Cost is invalid A supplied cost must be finite and nonnegative. |
| BELOW_COST | warning | Selling price is below the entered cost Compare the same unit, currency, and tax basis; this is not a complete profit calculation. |
| CURRENCY_FORMAT | blocker | Currency format is invalid Use a three-letter currency code; assignment and exchange rates are not verified. |
| CURRENCY_UNRECOGNIZED | warning | Currency code is not recognized by this runtime A three-letter shape alone does not establish a supported currency; verify the code and importer currency settings. |
| CURRENCY_MISSING | warning | Price currency is unknown Choose an explicit file currency or source column before interpreting cross-record prices. |
| PACK_INVALID | blocker | Pack quantity is invalid A supplied pack count must be a positive whole number; missing is not automatically one. |
| TAX_BASIS_UNKNOWN | warning | Tax basis is not recognized Use an explicit inclusive/exclusive value; unknown context is excluded from price comparisons. |
| PRICE_BASIS_UNKNOWN | warning | Price context is not recognized Distinguish regular, sale, retail, and wholesale price contexts. |
| PRICE_OUTLIER | warning | Price differs sharply from comparable siblings Leave the candidate out, use compatible explicit family peers, and require statistical/range and monetary thresholds. |
| PRICE_NOT_EVALUATED | info | Some prices lack comparable peer evidence Unknown context, unresolved identity, or too few peers is not a passed price check. |
| OPTION_INCOMPLETE | blocker | An option name or value is missing A partial option pair cannot reliably define a sellable variant. |
| OPTION_NAME_DUPLICATE | blocker | An option name appears twice One variant must not assign the same option twice. |
| VARIANT_DUPLICATE | blocker | Duplicate options under an explicit product group Two sellable records claim the same complete option combination. |
| VARIANT_OPTIONS_MISSING | blocker | A variation has no option values An explicitly declared variation needs a sourced combination. |
| VARIANT_OPTION_SCHEMA | blocker | Variants disagree about their option names An explicit parent group needs a consistent option structure. |
| PARENT_MISSING | blocker | Referenced parent is absent from this file Include the parent or use a reviewed existing-parent update workflow; no store lookup is claimed. |
| PARENT_UNCHECKED | warning | Existing parent was not checked An update references an external parent without a supplied store snapshot. |
| PARENT_AMBIGUOUS | blocker | Parent reference matches multiple records Resolve the parent identity before exporting its children. |
| PARENT_SELF | blocker | A product references itself as parent Self-parent relationships cannot form a valid variant graph. |
| PARENT_CYCLE | blocker | Product parent relationships contain a cycle Break the cycle and keep dependent records together for review. |
| PARENT_TYPE_CONFLICT | blocker | The referenced parent has an incompatible structure A simple/variation record cannot be used as an explicit variable parent. |
| STOCK_INVALID | blocker | Stock quantity is invalid A supplied quantity must be a finite safe whole number for these import profiles. |
| STOCK_NEGATIVE | warning | Stock quantity is negative This may represent backorders; confirm the inventory policy instead of forcing zero. |
| WEIGHT_INVALID | blocker | Weight is invalid A supplied weight must be finite and nonnegative. |
| WEIGHT_UNIT_MISSING | warning | Weight unit is unknown Map the unit explicitly; this module does not guess kilograms or grams. |
| WEIGHT_UNIT_UNKNOWN | warning | Weight unit needs destination review Only g, kg, lb/lbs, and oz are recognized here; no conversion is performed. |
| IMAGE_URL_INVALID | warning | An image URL is malformed or not public HTTP(S) This checks URL structure only, not accessibility, file type, or licensing. |
| IMAGE_DUPLICATE | warning | An image URL is repeated Review repeated images within one product; no automatic removal. |
| GOOGLE_GENDER_INVALID | warning | Google gender value is not recognized Use male, female, or unisex only when supplied by reliable product data. |
| GOOGLE_AGE_INVALID | warning | Google age group is not recognized Use a supported supplied value; never derive age from a product name alone. |
| CONDITION_INVALID | warning | Condition is not recognized Use new, used, or refurbished when supported; unknown condition is excluded from peer groups. |
| GOOGLE_OPTION_CONFLICT | warning | Google attribute conflicts with a supplied option Review color/size differences in the same product sheet. |
| GOOGLE_CATEGORY_MULTIPLE | warning | Google category appears to contain multiple values Google category is a single taxonomy value, separate from Woo category membership. |
| TAXONOMY_UNCHECKED | info | Official taxonomy membership was not checked Supplied category text is preserved; no category registry was loaded. |
| CATEGORY_NAME_MISSING | blocker | Category name is missing A new category needs a supplied name. |
| CATEGORY_SLUG_FORMAT | warning | Category slug may be rewritten by the destination Whitespace or URL delimiters need review; do not silently slugify. |
| CATEGORY_SLUG_DUPLICATE | blocker | Category slug is reused A slug collision makes category identity ambiguous. |
| CATEGORY_DUPLICATE | warning | Category name is repeated under the same parent Review duplicate branches while preserving legitimate same-name leaves under different parents. |
| CATEGORY_NEAR_DUPLICATE | warning | Category labels look similar Punctuation, spacing, case, or a one-character typo can create duplicate categories; no automatic merge. |
| CATEGORY_PARENT_MISSING | warning | Category parent is not present in this file It may already exist in the store; that external reference was not verified. |
| CATEGORY_PARENT_AMBIGUOUS | blocker | Category parent reference is ambiguous Use an unambiguous slug, ID, or full path to distinguish same-name branches. |
| CATEGORY_CYCLE | blocker | Category hierarchy contains a cycle Self-links and cyclic parent paths must be corrected. |
| CUSTOMER_CONTACT_MISSING | blocker | Customer has no contact identity Supply a valid email, phone, or known store ID; never invent an address. |
| CUSTOMER_NAME_MISSING | warning | Customer name is missing A contact may be legitimate, but its name has not been established. |
| CUSTOMER_EMAIL_INVALID | blocker | Email format is invalid Only practical syntax is checked; mailbox existence and ownership are not verified. |
| CUSTOMER_EMAIL_DUPLICATE | blocker | An email address appears in multiple customer records Review repeated customers before choosing a create/update target. |
| CUSTOMER_EMAIL_CONFLICT | blocker | One email has conflicting customer details Names or supplied addresses conflict under the same contact key. |
| CUSTOMER_NAME_MATCH | warning | Same full name, different contact identities People can legitimately share a name; never merge from name alone. |
| CUSTOMER_PHONE_INVALID | warning | Phone format needs review Accept recognizable local or international numbers without inventing a country prefix. |
| CUSTOMER_PHONE_CONTEXT | warning | Local phone number has no country context A local number may be valid, but international interpretation is unknown. |
| CUSTOMER_PHONE_REUSED | warning | A phone number is shared by different contacts Shared household/business phones can be legitimate; no automatic merge. |
| CUSTOMER_ADDRESS_INCOMPLETE | warning | Address is incomplete A supplied street address lacks city or country; postal deliverability was not verified. |
| CUSTOMER_COUNTRY_FORMAT | warning | Country value needs destination review A full country name may be accepted by some importers; code-based exporters need an explicit mapping. |
| CONSENT_UNRECOGNIZED | blocker | Marketing consent is ambiguous An unrecognized value must not become opt-in automatically. |
| CONSENT_REVIEW | warning | Positive marketing consent needs evidence A source flag alone does not prove permission; no marketing action is performed. |
| CONSENT_UNCHECKED | info | Blank marketing consent remains unknown Missing consent is not false or true and is never defaulted to opt-in. |
All sixteen original control families are represented; external facts remain Not checked without supplied evidence. Each run shows its actual coverage.
C1 · Required fields and valid values
C2 · Catalog identity
C3 · Product, brand, supplier and category match
C4 · Reference regular price
C5 · Promotion arithmetic
C6 · Category discount cap
C7 · Margin and cost coverage
C8 · Vendor agreement coverage
C9 · Vendor discount cap
C10 · Dates, time zone and lead time
C11 · Overlapping promotions and stacking
C12 · Exact store and channel scope
C13 · Inventory and allocations
C14 · Channel readiness and parity
C15 · Copy, assets and approval evidence
C16 · Supplied policy rules
| Code | Finding | Explanation |
|---|---|---|
| DEAL_AGREEMENT_COVERAGE | Vendor agreement does not cover this deal | Incorrect vendor terms can leave a promotion unfunded or outside the agreed scope. Resolve: the source value. Funding is excluded from profitability until verified. |
| DEAL_AGREEMENT_DUPLICATE | Agreement ID is ambiguous | Incorrect vendor terms can leave a promotion unfunded or outside the agreed scope. The agreement snapshot has multiple entries for this ID. Resolve the duplicate. |
| DEAL_AGREEMENT_NOT_FOUND | Agreement ID was not found | Incorrect vendor terms can leave a promotion unfunded or outside the agreed scope. The agreement does not exist in the supplied agreement snapshot. |
| DEAL_AGREEMENT_REQUIRED | Vendor-funded deal has no agreement ID | Incorrect vendor terms can leave a promotion unfunded or outside the agreed scope. Supply the actual agreement ID; a supplier name or funding assumption is not an agreement. |
| DEAL_ALLOCATION_EXCEEDS_STOCK | Reserved units exceed on-hand stock | A promotion can promise quantities that its entered inventory and forecast cannot support. Reduce the reservation or supply verified additional inventory for this exact scope. |
| DEAL_ALLOCATION_REUSED | Overlapping reservations may reuse the same inventory | A promotion can promise quantities that its entered inventory and forecast cannot support. Determine whether simultaneous deals reserve independent units or share the stock pool; reconcile reservations and availability. |
| DEAL_ALL_CASE | ALL must be explicit | Substring matches, duplicate tokens or inactive destinations can apply an offer to the wrong store or channel. Use uppercase ALL for all stores or channels. Other tokens remain case-sensitive. |
| DEAL_ALL_EMPTY | ALL has no active reference locations | Substring matches, duplicate tokens or inactive destinations can apply an offer to the wrong store or channel. The supplied the source value master has no unambiguous active entries. |
| DEAL_ALL_MIXED | ALL cannot be mixed with individual codes | Substring matches, duplicate tokens or inactive destinations can apply an offer to the wrong store or channel. Choose ALL alone or list the exact intended codes. |
| DEAL_APPROVAL_DUPLICATE | Approval reference is ambiguous | Customer-facing text, readiness assertions and approval evidence can disagree with the actual offer or belong to a different deal. Multiple supplied approval records share this reference. Resolve the duplicate instead of accepting an arbitrary row. |
| DEAL_APPROVAL_NOT_GRANTED | Referenced approval is not granted | Customer-facing text, readiness assertions and approval evidence can disagree with the actual offer or belong to a different deal. The supplied approval record is not explicitly approved. |
| DEAL_APPROVAL_REFERENCE_MISSING | Readiness assertion has no evidence reference | Customer-facing text, readiness assertions and approval evidence can disagree with the actual offer or belong to a different deal. A Yes flag is not approval proof. Link or identify the actual review evidence without exposing private credentials. |
| DEAL_APPROVAL_SCOPE | Approval belongs to another deal | Customer-facing text, readiness assertions and approval evidence can disagree with the actual offer or belong to a different deal. Use evidence whose deal ID matches this source record. |
| DEAL_ASSET_NOT_READY | Promotion assets are unfinished | Customer-facing text, readiness assertions and approval evidence can disagree with the actual offer or belong to a different deal. Confirm that the correct product image and price/date copy are ready in the destination. |
| DEAL_BELOW_COST | Offer sells below product cost | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. The promotional revenue is below the cost of all received units before fees. Review funding and the actual business decision. |
| DEAL_BOGO_PERCENT | BOGO conflicts with the get-item discount | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. BOGO means the get items are 100% discounted in this planner. Choose buy_x_get_y for a partial discount. |
| DEAL_BOOLEAN | Vendor funded flag is invalid | Missing or malformed source data cannot be safely interpreted by a destination importer. Use Yes/No, True/False or1/0 for readiness/funding flags. Blank stays unknown. |
| DEAL_BUNDLE_QUANTITY | Bundle needs multiple items | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. A bundle contains at least two received units. Use fixed_price for a single item. |
| DEAL_BUY_GET_QUANTITY | Buy/get quantities do not match the offer | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. Enter positive Buy quantity and Get quantity; Units in the complete offer must equal their sum. All items in this planner have the same unit price and cost. |
| DEAL_C10_NOT_CHECKED | C10: required evidence is unavailable | Absent evidence cannot prove that a promotion is correct or safe to launch. Supply the reference or input evidence named in the row-specific warning, then rerun validation. Missing evidence is never a passed check. |
| DEAL_C11_NOT_CHECKED | C11: required evidence is unavailable | Absent evidence cannot prove that a promotion is correct or safe to launch. Supply the reference or input evidence named in the row-specific warning, then rerun validation. Missing evidence is never a passed check. |
| DEAL_C12_NOT_CHECKED | C12: required evidence is unavailable | Absent evidence cannot prove that a promotion is correct or safe to launch. Supply the reference or input evidence named in the row-specific warning, then rerun validation. Missing evidence is never a passed check. |
| DEAL_C13_NOT_CHECKED | C13: required evidence is unavailable | Absent evidence cannot prove that a promotion is correct or safe to launch. Supply the reference or input evidence named in the row-specific warning, then rerun validation. Missing evidence is never a passed check. |
| DEAL_C14_NOT_CHECKED | C14: required evidence is unavailable | Absent evidence cannot prove that a promotion is correct or safe to launch. Supply the reference or input evidence named in the row-specific warning, then rerun validation. Missing evidence is never a passed check. |
| DEAL_C15_NOT_CHECKED | C15: required evidence is unavailable | Absent evidence cannot prove that a promotion is correct or safe to launch. Supply the reference or input evidence named in the row-specific warning, then rerun validation. Missing evidence is never a passed check. |
| DEAL_C16_NOT_CHECKED | C16: required evidence is unavailable | Absent evidence cannot prove that a promotion is correct or safe to launch. Supply the reference or input evidence named in the row-specific warning, then rerun validation. Missing evidence is never a passed check. |
| DEAL_C2_NOT_CHECKED | C2: required evidence is unavailable | Absent evidence cannot prove that a promotion is correct or safe to launch. Supply the reference or input evidence named in the row-specific warning, then rerun validation. Missing evidence is never a passed check. |
| DEAL_C3_NOT_CHECKED | C3: required evidence is unavailable | Absent evidence cannot prove that a promotion is correct or safe to launch. Supply the reference or input evidence named in the row-specific warning, then rerun validation. Missing evidence is never a passed check. |
| DEAL_C4_NOT_CHECKED | C4: required evidence is unavailable | Absent evidence cannot prove that a promotion is correct or safe to launch. Supply the reference or input evidence named in the row-specific warning, then rerun validation. Missing evidence is never a passed check. |
| DEAL_C5_NOT_CHECKED | C5: required evidence is unavailable | Absent evidence cannot prove that a promotion is correct or safe to launch. Supply the reference or input evidence named in the row-specific warning, then rerun validation. Missing evidence is never a passed check. |
| DEAL_C6_NOT_CHECKED | C6: required evidence is unavailable | Absent evidence cannot prove that a promotion is correct or safe to launch. Supply the reference or input evidence named in the row-specific warning, then rerun validation. Missing evidence is never a passed check. |
| DEAL_C7_NOT_CHECKED | C7: required evidence is unavailable | Absent evidence cannot prove that a promotion is correct or safe to launch. Supply the reference or input evidence named in the row-specific warning, then rerun validation. Missing evidence is never a passed check. |
| DEAL_C8_NOT_CHECKED | C8: required evidence is unavailable | Absent evidence cannot prove that a promotion is correct or safe to launch. Supply the reference or input evidence named in the row-specific warning, then rerun validation. Missing evidence is never a passed check. |
| DEAL_C9_NOT_CHECKED | C9: required evidence is unavailable | Absent evidence cannot prove that a promotion is correct or safe to launch. Supply the reference or input evidence named in the row-specific warning, then rerun validation. Missing evidence is never a passed check. |
| DEAL_CATALOG_COST | Entered cost differs from the catalog snapshot | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. Reconcile the source and catalog cost before relying on the margin calculation. Neither value is silently substituted. |
| DEAL_CATALOG_CURRENCY | Catalog and deal currencies differ | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. Convert using an explicitly approved rate outside this planner, or supply the matching currency snapshot. No exchange rate is guessed. |
| DEAL_CATALOG_DUPLICATE | Catalog SKU is ambiguous | Duplicate or contradictory identities can target the wrong product or attach the wrong facts. The supplied catalog contains duplicate SKU records. Resolve the duplicates; the first row is not treated as authority. |
| DEAL_CATALOG_IDENTITY | Product facts conflict with the catalog | Duplicate or contradictory identities can target the wrong product or attach the wrong facts. The same SKU has different the source value in the supplied catalog. Correct or explicitly reconcile the source. |
| DEAL_CATALOG_PRICE | Regular price differs from the catalog | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. The reference catalog gives a full-offer regular total of the source value the source value. Check stale prices, packs and units before advertising a discount. |
| DEAL_CATALOG_PROMO | Submitted promotion differs from catalog-based math | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. Recalculating the same rule from the independent catalog unit price gives the source value the source value. Correct the regular source price and submitted promotion together. |
| DEAL_CATALOG_PROMO_INVALID | Deal becomes invalid at the catalog price | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. The entered rule makes the independently supplied catalog price negative or exceeds the supported range. Reconcile stale prices before calculating a discount. |
| DEAL_CATALOG_STOCK | Stock differs from the catalog snapshot | A promotion can promise quantities that its entered inventory and forecast cannot support. Reconcile inventory for the same store scope and snapshot time. A typed stock value does not overwrite independent inventory evidence. |
| DEAL_CATALOG_VELOCITY | Sales velocity differs from the reference | A promotion can promise quantities that its entered inventory and forecast cannot support. Confirm the baseline period, units and store scope before relying on the demand forecast. |
| DEAL_CATEGORY_CAP | Discount exceeds the supplied category cap | Duplicate or contradictory identities can target the wrong product or attach the wrong facts. The effective whole-offer discount exceeds the category policy maximum of the source value%. |
| DEAL_CATEGORY_POLICY_DUPLICATE | Category policy is ambiguous | An invalid, unsupported or conflicting rule must not be treated as permission. Multiple supplied category policies have the same normalized category. Resolve the policy instead of accepting the first match. |
| DEAL_CATEGORY_POLICY_INVALID | Category policy contains an invalid percentage | An invalid, unsupported or conflicting rule must not be treated as permission. Supplied discount caps and gross-margin floors must be decimals from 0 to 100; invalid policy values are not treated as permissions. |
| DEAL_CELL_TOO_LONG | A deal cell is too long | Missing or malformed source data cannot be safely interpreted by a destination importer. the source value exceeds 10,000 characters. Shorten it before exporting. |
| DEAL_CHANNEL_PARITY | Channel snapshot does not match the plan | Customer-facing text, readiness assertions and approval evidence can disagree with the actual offer or belong to a different deal. Channel the source value has a different promotional price or activation window. Compare the exact entered snapshot before launch. |
| DEAL_CONTRIBUTION_RANGE | Contribution exceeds the supported range | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. The combined entered costs create an unsupported contribution amount. |
| DEAL_CONTROL_CHARACTER | Hidden control character | Missing or malformed source data cannot be safely interpreted by a destination importer. the source value contains an unsupported control character. Re-enter the value from the source. |
| DEAL_COPY_BUNDLE | Deal name and bundle calculation disagree | Customer-facing text, readiness assertions and approval evidence can disagree with the actual offer or belong to a different deal. The quantity or ending total in the written “N for amount” offer differs from the entered rule. |
| DEAL_COPY_NOT_APPROVED | Promotion copy is not approved | Customer-facing text, readiness assertions and approval evidence can disagree with the actual offer or belong to a different deal. The source explicitly says the copy is unapproved. Complete review before launch. |
| DEAL_COPY_PERCENT | Deal name promises a different discount | Customer-facing text, readiness assertions and approval evidence can disagree with the actual offer or belong to a different deal. The percentage written in the deal name does not match Discount value. Correct the customer-facing promise or the actual rule. |
| DEAL_COST_RANGE | Total product cost exceeds the supported range | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. Cost per unit multiplied by received units is too large to calculate safely. |
| DEAL_COST_UNKNOWN | Profitability cannot be checked | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. Cost per unit is missing or invalid. Unknown cost is never treated as zero; gross and contribution margins stay blank. |
| DEAL_CURRENCY | Currency is missing or invalid | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. Supply a supported three-letter currency code. Values from different currencies cannot be compared. |
| DEAL_DATE_ORDER | Promotion ends before it can run | An ambiguous or inconsistent schedule can activate the wrong price at the wrong local time. End must follow start. Date-only end dates include the whole stated day; timestamp end instants are exclusive. |
| DEAL_DATE_POLICY | Schedule policy is invalid | An ambiguous or inconsistent schedule can activate the wrong price at the wrong local time. Correct the explicitly supplied maximum-duration or minimum-lead-day policy; invalid policies are not ignored. |
| DEAL_DECIMAL_STYLE | Choose a decimal style | Missing or malformed source data cannot be safely interpreted by a destination importer. Choose dot or comma decimal style for both source and references before interpreting money. |
| DEAL_DESTINATION_SETUP | This is a promotion planning sheet | A valid planning file does not prove that the selected platform or app has implemented the offer. Configure the chosen promotion system and test actual carts, scheduling, stacking and app rounding before launch. File export does not activate a promotion. |
| DEAL_DISCOUNT_RANGE | Percent discount is invalid | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. Check the selected type: percent uses 20 for20%; amount_off is removed from the complete regular total; fixed_price/bundle is the complete ending total. |
| DEAL_DURATION_LIMIT | Promotion exceeds the supplied duration policy | An ambiguous or inconsistent schedule can activate the wrong price at the wrong local time. the source value calendar days exceeds the configured maximum of the source value; this maximum is a supplied business policy. |
| DEAL_EMPTY | No deal rows were supplied | Missing or malformed source data cannot be safely interpreted by a destination importer. Choose a worksheet containing at least one real deal row. |
| DEAL_END_DATE | End date is invalid | An ambiguous or inconsistent schedule can activate the wrong price at the wrong local time. Supply a real end date or explicit-offset timestamp. Date-only ends include the whole local day; timestamp ends are exclusive. |
| DEAL_EXPIRED | Promotion has already ended | An ambiguous or inconsistent schedule can activate the wrong price at the wrong local time. The end is earlier than the explicitly supplied review time. Confirm this is an intentional historical file. |
| DEAL_FEES_UNKNOWN | Contribution margin is not fully checked | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. Supply Variable fee, Fixed fee and Other cost explicitly. Enter 0 only when zero is known; missing fees do not become zero. |
| DEAL_FEE_RANGE | Combined fees exceed the supported range | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. Variable and fixed fees together exceed the safe minor-unit range. |
| DEAL_FORMULA_TEXT | Spreadsheet formula-like text | Missing or malformed source data cannot be safely interpreted by a destination importer. the source value begins with a spreadsheet formula trigger. Export it as safe literal text after reviewing the source. |
| DEAL_FREE_OFFER | Offer total becomes zero | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. The complete offer is free after rounding. Confirm a deliberate giveaway and use a promotion system that supports it; no margin can be calculated. |
| DEAL_GET_PERCENT | Get-item discount is missing or invalid | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. For buy_x_get_y, explicitly enter the discount percentage on the received get items, greater than 0 and at most 100. |
| DEAL_GROSS_MARGIN_FLOOR | Gross margin is below the category policy floor | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. Gross margin before fees is below the supplied minimum of the source value%. |
| DEAL_IDENTIFIER_LENGTH | Identifier is too long | Duplicate or contradictory identities can target the wrong product or attach the wrong facts. Keep deal IDs at most 100 characters and SKUs at most 255 characters; your destination may impose a smaller limit. |
| DEAL_IDENTIFIER_TRIM | Identifier has surrounding whitespace | Duplicate or contradictory identities can target the wrong product or attach the wrong facts. Confirm the exact identifier in the destination. Source whitespace is preserved and must not silently change identity. |
| DEAL_ID_DUPLICATE | Deal ID is reused | Duplicate or contradictory identities can target the wrong product or attach the wrong facts. Assign a unique deal ID after reviewing the duplicated records; do not silently merge. |
| DEAL_INSUFFICIENT_ALLOCATION | Reservation cannot fulfill one offer | A promotion can promise quantities that its entered inventory and forecast cannot support. Reserve enough units for all items received in at least one redemption. |
| DEAL_INSUFFICIENT_OFFER_STOCK | Not enough stock for one complete offer | A promotion can promise quantities that its entered inventory and forecast cannot support. On-hand units cannot fulfill the received quantity of one redemption. |
| DEAL_INVENTORY_SHORTFALL | Inventory may not cover promoted demand | A promotion can promise quantities that its entered inventory and forecast cannot support. The supplied forecast estimates the source value units over the source value calendar day(s); only the source value units are available in the entered scope. This is a projection, not a stock reservation. |
| DEAL_LEAD_TIME | Promotion has too little build time | An ambiguous or inconsistent schedule can activate the wrong price at the wrong local time. There are the source value calendar days between submission and start; the supplied policy asks for the source value. |
| DEAL_LEAD_UNKNOWN | Build lead time is not checked | An ambiguous or inconsistent schedule can activate the wrong price at the wrong local time. A lead-time policy was supplied but Submission date is blank. |
| DEAL_LIFT | Demand multiplier is invalid | A promotion can promise quantities that its entered inventory and forecast cannot support. Enter an explicit positive multiplier no greater than 1,000; 1 means no lift. No forecast multiplier is guessed. |
| DEAL_MARGIN_FLOOR | Contribution margin is below the supplied floor | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. The entered policy requires the source value% contribution margin after the entered costs. This is your supplied policy, not a universal threshold. |
| DEAL_MIN_EXCEEDS_LIMIT | Minimum quantity exceeds the customer limit | Contradictory quantity constraints can make the offer impossible to redeem. A customer cannot reach the threshold without exceeding the allowed quantity. |
| DEAL_MIXED_DATE_PRECISION | Dates mix a day and a timestamp | An ambiguous or inconsistent schedule can activate the wrong price at the wrong local time. Use two dates or two explicit timestamps so the activation boundary is unambiguous. |
| DEAL_MONEY_INVALID | Invalid money value | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. the source value must be a non-negative decimal in the selected locale. |
| DEAL_MONEY_PRECISION | Money contains fractions of a minor unit | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. the source value is rounded half up to the source value decimal places for the source value. Confirm the intended amount. |
| DEAL_MONEY_RANGE | Money exceeds the supported range | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. Reduce the amount or split the offer; amounts above the safe minor-unit range are not calculated. |
| DEAL_NAME_BRAND | Same name, different brands | Duplicate or contradictory identities can target the wrong product or attach the wrong facts. Review the exact SKU and manufacturer; a product name does not establish brand identity. |
| DEAL_NAME_CATEGORY | Same name, different categories | Duplicate or contradictory identities can target the wrong product or attach the wrong facts. Review category membership and exact product identifiers before reclassifying anything. |
| DEAL_NAME_SUPPLIER | Same name, different suppliers | Duplicate or contradictory identities can target the wrong product or attach the wrong facts. Compare exact SKUs and supplier identities. A shared product name is only a candidate match. |
| DEAL_NEGATIVE_CONTRIBUTION | Offer loses money after entered costs | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. Product cost, variable/fixed fees and other entered costs exceed promotional revenue. Vendor funding is not assumed. |
| DEAL_NEGATIVE_PROMO | Promotion creates a negative price | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. Revise the discount; a customer cannot owe a negative item total. |
| DEAL_NO_SAVING | This deal does not reduce the price | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. The promotional total is equal to or higher than the regular total. Check the discount type, units and amount. |
| DEAL_OFFER_EXCEEDS_LIMIT | Customer limit prevents this offer | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. The customer unit limit is smaller than the number of received items. Decide whether the limit was meant to count offers instead of units. |
| DEAL_OFFER_EXCEEDS_MAX | Offer cannot fit the maximum quantity | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. Maximum quantity must allow all received items in at least one complete offer. |
| DEAL_OFFER_RANGE | Offer total exceeds the supported range | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. Unit price multiplied by offer quantity exceeds the safe minor-unit range. |
| DEAL_OFFER_REGULAR_MISMATCH | Whole-offer regular price does not match | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. Unit price × all the source value received items is the source value the source value; the submitted whole-offer regular total differs. |
| DEAL_OVERLAP_CONFLICT | Exclusive deals overlap for the same product | Multiple eligible promotions can compound or compete in ways a single-row calculation cannot prove. Change conflicting windows or exact store/channel scope, or explicitly configure a supported combination policy. Review each related row. |
| DEAL_OVERLAP_REVIEW | Overlapping deals need destination verification | Multiple eligible promotions can compound or compete in ways a single-row calculation cannot prove. Test stacked or best-price cart results, caps and ordering in the chosen destination; a source label is not a configured promotion. |
| DEAL_PERCENT_FRACTION | Check percentage scale | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. the source value is between 0 and 1. This planner treats 0.2 as 0.2%, not 20%. Verify the spreadsheet percentage format; no multiplication is guessed. |
| DEAL_PERCENT_RANGE | Percentage is invalid | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. the source value must be from 0 to 100. Enter 20 for 20%, without a percent symbol. |
| DEAL_POLICY_ID_DUPLICATE | Policy ID is duplicated | An invalid, unsupported or conflicting rule must not be treated as permission. Supplied policy ID the source value is reused. Resolve the duplicate before treating coverage as complete. |
| DEAL_POLICY_INVALID | Policy has no explicit active flag | An invalid, unsupported or conflicting rule must not be treated as permission. Give each active policy a unique ID, an explicit active flag, a supported type, a valid value and blocker/warning severity. |
| DEAL_POLICY_PURCHASE_LIMIT | Customer limit violates the supplied policy | An invalid, unsupported or conflicting rule must not be treated as permission. Policy the source value allows at most the source value received units per customer. |
| DEAL_POLICY_STACKING | Stacking does not meet the supplied policy | Multiple eligible promotions can compound or compete in ways a single-row calculation cannot prove. Policy the source value requires a written stacking approval reference. |
| DEAL_POLICY_TEXT | Promotion text triggers a supplied policy | An invalid, unsupported or conflicting rule must not be treated as permission. Policy the source value: the source value phrase “the source value”. This is a supplied business rule, not a legal opinion. |
| DEAL_POLICY_UNSUPPORTED | A supplied policy cannot be evaluated | An invalid, unsupported or conflicting rule must not be treated as permission. Policy the source value uses unsupported type the source value. Obtain a manual review; this rule is not counted as checked. |
| DEAL_PRIMARY_NOT_READY | Primary channel is not ready | Customer-facing text, readiness assertions and approval evidence can disagree with the actual offer or belong to a different deal. The source explicitly marks the primary destination as unfinished. Exporting a plan does not make the promotion live. |
| DEAL_PROJECTION_RANGE | Forecast is too large | A promotion can promise quantities that its entered inventory and forecast cannot support. The supplied velocity, duration or multiplier creates an unsupported unit count. |
| DEAL_PROMO_MISMATCH | Submitted promotional total is wrong | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. The stated rule independently calculates the source value the source value for the complete offer. Check the submitted ending price. |
| DEAL_PROMO_RANGE | Promotional total exceeds the supported range | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. The computed promotion exceeds the safe minor-unit range. |
| DEAL_PURCHASE_LIMIT_UNKNOWN | Customer purchase limit is unspecified | Contradictory quantity constraints can make the offer impossible to redeem. Set a positive unit limit or review an intentionally unlimited promotion in the destination. Blank is not assumed to mean unlimited. |
| DEAL_QUANTITY_BOUNDS | Maximum quantity is below the minimum | Contradictory quantity constraints can make the offer impossible to redeem. Raise the maximum or correct the minimum; no cart can satisfy both values. |
| DEAL_QUANTITY_INVALID | Quantity is invalid | Contradictory quantity constraints can make the offer impossible to redeem. the source value must be a whole numberthe source value. |
| DEAL_RECORD_SHAPE | A deal row is malformed | Missing or malformed source data cannot be safely interpreted by a destination importer. Re-read the source into correctly mapped row objects; malformed rows are not validated. |
| DEAL_REQUIRED | Required deal fields are missing | Missing or malformed source data cannot be safely interpreted by a destination importer. Fill each missing mandatory source field listed in the warning; no identity, schedule or pricing value is invented. |
| DEAL_REVIEW_TIME | Review time is invalid | An ambiguous or inconsistent schedule can activate the wrong price at the wrong local time. Supply a valid explicit review timestamp when checking expiration. |
| DEAL_ROW_ID_DUPLICATE | Source row identity is duplicated | Duplicate or contradictory identities can target the wrong product or attach the wrong facts. Re-read source rows with distinct row IDs so exclusions and reviews cannot target the wrong row. |
| DEAL_ROW_LIMIT | Too many deal rows | Contradictory quantity constraints can make the offer impossible to redeem. Split the input into batches of at most5,000 rows, then separately review conflicts across batches. |
| DEAL_SCOPE_AMBIGUOUS | Reference code is duplicated | Substring matches, duplicate tokens or inactive destinations can apply an offer to the wrong store or channel. The supplied master contains duplicate code the source value; resolve the master before choosing a location. |
| DEAL_SCOPE_INACTIVE | Store or channel is not confirmed active | Substring matches, duplicate tokens or inactive destinations can apply an offer to the wrong store or channel. Code the source value has an inactive or missing active flag in the supplied master. |
| DEAL_SCOPE_NOT_FOUND | Store or channel code was not found | Substring matches, duplicate tokens or inactive destinations can apply an offer to the wrong store or channel. Exact code the source value is absent from the supplied the source value master. Substring matches are never accepted. |
| DEAL_SCOPE_TOKEN | Store or channel list is malformed | Substring matches, duplicate tokens or inactive destinations can apply an offer to the wrong store or channel. Use exact, unique comma-separated codes in the source value; empty entries, duplicates and free-text names are not accepted. |
| DEAL_SECONDARY_NOT_READY | Secondary channels are not ready | Customer-facing text, readiness assertions and approval evidence can disagree with the actual offer or belong to a different deal. A customer-facing channel may show different dates or prices. Confirm all intended channels before launch. |
| DEAL_SKU_FACT_CONFLICT | The same SKU has conflicting product facts | Duplicate or contradictory identities can target the wrong product or attach the wrong facts. Reconcile the different product facts under the same SKU against a trusted catalog; no row wins by position. |
| DEAL_SKU_NOT_FOUND | Product SKU is absent from the reference catalog | Duplicate or contradictory identities can target the wrong product or attach the wrong facts. Use an exact SKU from the supplied catalog or update the catalog snapshot. Names never establish an identity match. |
| DEAL_SKU_WHITESPACE | SKU contains whitespace | Duplicate or contradictory identities can target the wrong product or attach the wrong facts. Check whether the whitespace is part of the actual SKU. Identifiers are never joined or guessed. |
| DEAL_STACKING_APPROVAL | Stacking has no written approval reference | Customer-facing text, readiness assertions and approval evidence can disagree with the actual offer or belong to a different deal. Provide an approval reference and validate combination order, discount caps and the final cart in the destination. |
| DEAL_STACKING_POLICY | Stacking policy is not recognized | Multiple eligible promotions can compound or compete in ways a single-row calculation cannot prove. Choose exclusive, best_price or stack. Boolean Yes/No only maps to stack/exclusive; it does not configure an app. |
| DEAL_STACKING_UNVERIFIED | Actual stacked cart is not verified | Multiple eligible promotions can compound or compete in ways a single-row calculation cannot prove. An approval reference is not a live cart simulation. Combination order, eligible lines, taxes and rounding must be tested in the destination. |
| DEAL_STAGE | Review stage is invalid | Missing or malformed source data cannot be safely interpreted by a destination importer. Choose planning or launch. Launch strengthens copy and primary-channel readiness requirements. |
| DEAL_START_DATE | Start date is invalid | An ambiguous or inconsistent schedule can activate the wrong price at the wrong local time. Use a real YYYY-MM-DD date or an ISO timestamp with an explicit offset matching the selected IANA time zone. |
| DEAL_SUBMITTED_AFTER_START | Submission is after the promotion starts | An ambiguous or inconsistent schedule can activate the wrong price at the wrong local time. Review whether this is a late submission or an intentional historical record. |
| DEAL_SUBMITTED_DATE | Submission date is invalid | An ambiguous or inconsistent schedule can activate the wrong price at the wrong local time. Supply an unambiguous submission date in the selected time zone. |
| DEAL_TIME_ZONE | Time zone is missing or invalid | An ambiguous or inconsistent schedule can activate the wrong price at the wrong local time. Choose the destination store’s IANA time zone. No browser or machine time zone is silently applied. |
| DEAL_TYPE | Unsupported deal type | Missing or malformed source data cannot be safely interpreted by a destination importer. Choose percent, amount_off, fixed_price, bundle, bogo, or buy_x_get_y. Tiered or mixed-product deals need a separate, explicit configuration. |
| DEAL_UNITS | Offer quantity is invalid | Contradictory quantity constraints can make the offer impossible to redeem. Units must be an explicit whole number from 1 to 1,000,000. It counts all items received, including free items. |
| DEAL_UNIT_PRICE | Regular unit price is invalid | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. Regular price per unit must be positive and fit the currency precision. Currency symbols, expressions and scientific notation are not accepted. |
| DEAL_UNUSED_DISCOUNT | Discount value is unused for this type | A wrong amount, unit basis or missing cost can produce an incorrect offer or hide a loss. BOGO and buy_x_get_y use buy/get quantities and the get-item discount. Clear Discount value to avoid importing contradictory instructions. |
| DEAL_VELOCITY | Weekly sales velocity is invalid | A promotion can promise quantities that its entered inventory and forecast cannot support. Enter a non-negative decimal baseline in units per week. |
| DEAL_VENDOR_CAP | Discount exceeds the vendor agreement cap | Incorrect vendor terms can leave a promotion unfunded or outside the agreed scope. The effective whole-offer discount exceeds the supplied agreement maximum of the source value%. |
| DEAL_VENDOR_POLICY_INVALID | Vendor discount cap is invalid | Incorrect vendor terms can leave a promotion unfunded or outside the agreed scope. The supplied agreement cap must be a decimal from 0 to 100. |
These controls surround the row-level rules. Their findings can apply to a whole file or workspace and therefore may not have a single source row.
| Control | Behavior and resolution |
|---|---|
| File and workbook integrity | Unsupported file type, encoding, broken CSV quotes, null bytes, empty data, oversized files or cells, too many rows/columns/sheets, macros, embedded files and encryption cannot silently become records. Re-save a small data-only source. |
| Bounded archive parsing | Central and local archive sizes, names, methods, flags and boundaries must agree before decompression. ZIP64, streamed entries and overlaps are rejected. A slow reader is stopped; the file must be simplified. |
| Sheet and header selection | A suggested table is only a suggestion. Choose the actual worksheet and header. Empty or duplicate headers, uneven row widths, hidden rows and merged cells need review. Overflow cells remain in the recovery workbook. |
| Unmapped and repeated columns | Populated source columns left unassigned produce omission warnings. Ambiguous aliases stay unassigned. A column used for different fields needs review; different edits are preserved in separate Prepared recovery fields. |
| Pending changes and cancelled reads | Export is blocked while a file is reading or source/reference choices await Apply. Changing mappings, records, settings or destination invalidates previous decisions and prepared download buttons. Clear cancels pending work. |
| Formula caches and source corrections | Source formulas are never evaluated. A missing cached result stays blank, a genuine cached zero stays zero, and error cells block. A deliberate corrected field is rechecked with provenance retained; restoring the original reinstates its applicable finding. |
| Identifier precision | Text SKUs, GTINs, phones and postal codes retain leading zeros. IDs stored as Excel numbers are flagged; unsafe precision blocks. The app cannot recover lost digits. Numeric locale changes do not rewrite shared text identifiers. |
| Compatible reference identity | Unique compatible identifiers must resolve one record. A shared product ID can be narrowed by variant/SKU evidence. Contradictory identifiers block; matching names alone never authorize a fill or merge. |
| Reference value and context conflicts | Conflicting names, brands, suppliers, options, currencies, packs and customer address context prevent automatic filling. Money requires supplied reference currency and product pack context. The source-currency default is never assigned to the reference. |
| Reference evidence safety | Mapped reference formula/error cells and uncertain numeric identifiers cannot supply trusted fills. A deal evidence table with missing/ambiguous headers or unsafe identifiers is omitted and its dependent controls remain Not checked. |
| Destination identities and sparse updates | Create and update rules differ. Updates require an appropriate existing handle, SKU, ID or option identity. Some records need separate files to avoid destructive blank columns. Native Shopify customer overwrite is blocked; use the supported selective alternative. |
| Product and variant structure | Unconfirmed flat WooCommerce families, missing parents/options, repeated combinations, conflicting parent fields, image-list delimiters and unsupported structures require correction or another adapter. Parent and sellable variation fields are not interchangeable. |
| Money and inventory export rules | The actual store currency must be selected for product exports. A source/store mismatch blocks; there is no currency conversion. Destination money precision, sale-reference prices, inventory locations and weight-unit setup are checked or explicitly left for review. |
| Taxonomy and same-sheet Google values | Supplied Shopify and Google fields are tested against their bundled lists. Source/Woo categories and Shopify collections have different meanings. Unsupported integration, ownership scope or populated fields cannot disappear without a warning or blocker. |
| Customer and collection scope | Unknown marketing consent is not opt-in, and positive supplied consent requires review of evidence. Address updates need the supported identity. Shopify Custom Collections are flat; a category hierarchy cannot silently become a collection tree. |
| Final output and omission review | Every prepared cell, including exported worksheet provenance, is checked for executable spreadsheet text. Blockers cannot be accepted away. Unsupported populated fields are reported. CSV-only profiles cannot export XLSX. |
| Review, exclusion and recovery | A warning needs a recorded reason of at least twelve characters. Excluded rows are retained in the session, recovery workbook and report. Changes clear previous review decisions. The report includes all findings, reference coverage and replacement history. |
| External reality and promotion activation | No check proves barcode ownership, contact deliverability, consent authenticity, live stock, current store state or legal compliance. Deal outputs calculate supplied single-SKU offers and document evidence; they do not activate promotions or model mixed-SKU carts. |