Todo lo que hace Price Bulk Editor, en detalle.
Construido en torno a cuatro garantías: previsualizas antes de confirmar, siempre puedes hacer rollback, ves el progreso en vivo y tus reglas de filtrado son lo bastante precisas para excluir exactamente lo que necesitas.
Simula cada tarea antes de confirmarla.
El desastre más habitual con un editor masivo es lanzar un trabajo que afecta a más SKU de los esperados. La simulación muestra el resultado completo sin tocar Shopify: qué productos coinciden con tu filtro, qué variantes cambiarían, cuál sería el nuevo precio y qué elementos fallarían la validación.
- ✓ Diff lado a lado anterior → nuevo por variante
- ✓ Avisos de validación (precio negativo, compare-at ausente, etc.)
- ✓ Recuento de SKU + estimación del delta total de ingresos
- ✓ Exportable en CSV para validación de stakeholders
filter: tag=summer-sale AND vendor=Outdoor matched: 2,481 SKUs across 412 products action: −25% off compare-at, floor $9.99 variant was now Δ SUM-TEE-S $39.00 $29.25 −$9.75 SUM-TEE-M $39.00 $29.25 −$9.75 SUM-CAP-OS $24.00 $18.00 −$6.00 … 2,478 more rows WARNINGS (3): SUM-LEGGINGS-XL — would price below floor; skipped SUM-PACK-A — missing compare-at; skipped SUM-SOCKS-L — currently archived; skipped estimated revenue delta over 7 days: −$48,210
Every dry-run runs the same eight rule checks the executor runs at commit time — except no products get touched. Each warning carries a severity so you know what's catastrophic vs. just worth noticing.
- ● Price below cost. The new price is under the Shopify cost-per-item. Margin would turn negative.
- ● Price goes negative. The action produces a negative price. Hard reject.
- ● Sign error suspected. The median delta contradicts the action sign (e.g. you said "decrease" but the math goes up). Often a missing minus sign.
- ● Missing compare-at. You asked for percent off compare-at, but the variant has none. Skipped.
- ● Archived product. The product is archived on Shopify. Skipped — you probably didn't mean to discount it.
- ● Variant without cost. Margin pricing rule, but the variant has no cost on Shopify. Skipped.
- ● Price outlier. The new price is more than two standard deviations from the median. Worth a second look.
- ● Low inventory. The variant has fewer than five units in stock. Informational — you may not want to feature it.
- 2026-06-14 09:00 creada snapshot de 2,481 variantes
- 2026-06-14 09:01 aplicar −25 % compare-at, 2,478 con éxito, 3 omitidas
- 2026-06-21 23:59 rollback snapshot reproducido, 2,478/2,478 restauradas
Rollback basado en snapshot que sí se completa.
Antes de cada tarea, registramos el precio anterior y el compare-at de cada variante objetivo. El rollback reproduce ese snapshot, no es matemática de "aplicar el porcentaje inverso", que arrastra errores de redondeo y no puede recuperarse de ediciones externas durante la rebaja.
- ✓ Restauración exacta por variante, incluido el compare-at
- ✓ Idempotente: seguro ante reintentos si Shopify aplica rate limit
- ✓ Reanudable si se interrumpe a mitad del rollback
- ✓ Snapshots por mercado restaurados de forma independiente
Importación CSV para precios arbitrarios por SKU.
Cuando la lógica de precios no encaja en una regla (precios de contrato de un mayorista, lista puntual de liquidación de finanzas), importa un CSV con tus SKUs y el nuevo precio absoluto. Se aplica el mismo flujo de simulación + rollback.
- ✓ Columnas:
sku(recomendado) ovariant_id, másnew_price. Opcional:new_compare_at_price. - ✓ Hasta 5.000 filas por archivo
- ✓ Validación de simulación fila a fila antes de confirmar
- ✓ El registro de auditoría conserva el CSV original
sku,new_price,new_compare_at_price SUM-TEE-S,29.25,39.00 SUM-TEE-M,29.25,39.00 SUM-CAP-OS,18.00,24.00 SUM-PACK-A,49.00,69.00 SUM-HOODIE-L,54.00, … up to 5,000 rows per file
Filtros por etiqueta, colección y atributos.
Filtra el catálogo con cualquier combinación de etiqueta, colección, proveedor, tipo de producto, franja de precio o nivel de inventario. Los filtros de variantes añaden patrones de SKU y valores de opciones.
A nivel de producto
- tag = "summer-sale"
- collection ∈ "Outdoor", "Hiking"
- vendor != "Discontinued"
- price BETWEEN $20 AND $80
A nivel de variante
- sku STARTS_WITH "SUM-"
- option.size IN "S", "M"
- inventory_quantity > 0
- compare_at IS NOT NULL
Exclusión
- NOT tag = "new-arrival"
- NOT sku IN [subir lista]
- NOT vendor = "Brand X"
- NOT product_type = "Gift Card"
Precios por mercado para Shopify Markets.
Aplica un precio distinto, un porcentaje de descuento o una regla de redondeo por mercado. Define precios absolutos para EE. UU., un porcentaje sobre la base de la UE y un redondeo a .95 para Suiza, todo en una sola tarea. El estado anterior de cada mercado se guarda en un snapshot independiente.
| Mercado | Regla | Redondeo | Mínimo |
|---|---|---|---|
| US | −25 % del compare-at | .99 | $9.99 |
| EU | −20 % de la base | .00 | €10.00 |
| CH | CHF fijo | .95 | CHF 14.95 |
| UK | −25 % del compare-at | .99 | £8.99 |
Reglas recurrentes: defínelas una vez, se ejecutan siempre.
Flash Friday cada semana, liquidación mensual el día 1, rollback automático al final de temporada el 22 de septiembre. Cada ejecución genera un snapshot nuevo, de modo que cada recurrencia es reversible de forma independiente.
Flash Friday a las 09:00 CET
Cada viernes a las 09:00, aplica −20 % a tag="flash-friday". Rollback automático el domingo a las 23:59. Se rota con los SKU etiquetados en cada momento.
Liquidación de fin de mes
El último día de cada mes, fija el precio en coste × 1,1 para el inventario con más de 90 días. Rollback el lunes siguiente.
Historial completo de cada cambio, exportable a CSV.
Cada acción —tarea creada, simulación revisada, confirmación, rollback, recurrencia disparada— se registra con el usuario, la marca temporal, la IP y el payload completo. Filtra por fecha, usuario o SKU afectado; exporta a CSV para finanzas, solicitudes RGPD de datos o auditorías internas.
Retención: desde 30 días en Free hasta 5 años en Scale, según el plan.
2026-06-14T09:00Z marie@store.com task.create "Summer Sale 25%" 2026-06-14T09:00Z marie@store.com task.dry_run matched=2481 2026-06-14T09:01Z marie@store.com task.commit succeeded=2478 skipped=3 2026-06-14T09:18Z system task.complete duration=1041s 2026-06-21T23:59Z system task.rollback restored=2478 of 2478 2026-06-22T08:14Z cfo@store.com audit.export period=2026-06 format=csv
Precios basados en margen y coste.
Fija el precio como coste × multiplicador, apunta a un porcentaje fijo de margen o aplica un markup por franjas de precio. Combínalo con reglas de redondeo (siempre .99, siempre .95, etc.) y mínimos de margen.
- ✓ Lectura del coste desde el coste por artículo del inventario de Shopify
- ✓ Mínimo por margen (p. ej. siempre ≥ 40 %)
- ✓ Franjas por precio (markup 1,4× por debajo de $20, 1,6× por encima)
| SKU | Coste | Regla | Nuevo precio | Margen |
|---|---|---|---|---|
| SUM-TEE-S | $11.20 | ×1.6 → .99 | $17.99 | 37.7% |
| SUM-CAP-OS | $5.40 | ×1.8 → .99 | $9.99 | 46.0% |
| SUM-PACK-A | $22.50 | ×1.4 → .99 | $31.99 | 29.7% |
| SUM-JKT-L | $48.00 | ×1.4, min 35% | $73.99 | 35.1% |
Catch the manual edit that broke your sale.
Once a campaign is live, anything else that touches a product price — a teammate fixing a typo, an inventory-sync app, a Shopify Flow rule — silently drifts the catalog away from the snapshot the rollback expects. We listen on the Shopify products/update webhook and surface every drift as an alert with the variant, the campaign, the price we wrote, and the price that's there now. Acknowledge it or roll it back; either way, no surprises when the sale ends.
- ✓ Webhook-driven — fires within seconds of the manual edit
- ✓ Idempotent per (variant, campaign, observed-price); Shopify retries can't dupe
- ✓ Inline list + nav banner counter, polled every 30 seconds
- ✓ Drift caught here keeps the rollback contract honest
We checked the App Store listings of seven direct competitors in May 2026. None advertise drift detection.
2026-06-15 14:22 variant SUM-TEE-S
campaign price $29.25 → observed $29.99
source: products/update webhook
status: NEW [acknowledge]
2026-06-15 16:08 variant SUM-CAP-OS
campaign price $18.00 → observed $24.00
source: products/update webhook
status: NEW [acknowledge]
2026-06-16 09:41 variant SUM-PACK-A
campaign price $49.00 → observed $52.00
source: products/update webhook
status: ACKNOWLEDGED
by: marie@store.com on 2026-06-16 10:02
Your campaigns don't get stuck. Guaranteed.
Most "my BFCM is frozen" support tickets in this category have the same root cause: the worker chain that drives a bulk operation lost a message, a deploy interrupted mid-run, or Shopify's bulk API briefly hiccupped. We run three independent recovery layers so the operator never sees a campaign stuck in RUNNING for hours without a path forward.
Status-progress recovery
The progress-polling handler self-heals during normal operation — if Shopify shows a bulk operation we don't know about (or vice versa) it reconciles before the merchant ever notices.
Stuck-message scanner
A cron sweep finds tasks that are READY past run_at, RUNNING with no progress, or fully applied but still mid-flight; either resets a stuck Messenger row for redelivery or re-dispatches the right TaskMessage. No Shopify API calls — fast and cheap.
Shopify reconciliation
When the cheap fixes fail, an hourly cron asks Shopify directly: "what's the real status of bulk operation X?" Shopify's answer wins; our local state conforms to it. Orphans get marked, completions get acknowledged, failures get surfaced with the Shopify error code.
The three layers were ported from a sister BigCommerce app where they've run in production for two years. Every recovery decision lands in the audit log so support can reconstruct what happened later.
Stuck campaigns are the #1 complaint cited in reviews of competing apps. We made it the failure mode we engineer against, not the one we apologize for.
Prueba el flujo con tu propio catálogo.
Instala gratis en Shopify, lanza una simulación contra tu tienda y decide después. El plan gratuito gestiona 100 ediciones de SKU al mes, suficiente para validarlo antes de pagar nada.
Plan gratuito · Sin tarjeta de crédito · 5 días de prueba en Growth y Scale · Ahorra un 30 % con facturación anual