Documentation

    Bulk & workflow

    Server-side bulk jobs, review modals, pricing, status and excluding products.

    1Server-side bulk jobs & progress

    All bulk actions run server-side. Once a job starts, our bulk worker takes over — you can close the tab and the job keeps running.

    • A realtime progress bar at the top of product enrichment shows processed items, errors and the job type.
    • Job logs show per-product results: what succeeded, what was skipped and why.
    • Jobs deduplicate their product list, so a product is never processed twice.
    • When a job finishes, a Review button appears and stays available while batches await review.
    Server-side bulk jobs & progress

    Real-world example

    512 products in one job. The job runs in the bulk worker, not in your browser: close the tab or grab a coffee — the progress bar picks the state back up in real time.

    The job logs show per item whether it succeeded and which items were skipped (for example deleted in Shopify).


    2Review modals per job type

    Every bulk job produces results you review before anything is pushed to Shopify.

    • Content — titles, descriptions, SEO title and meta, with a diff against the current Shopify text.
    • Alt tags — generated alt text per image.
    • Collections — suggested collections per product, with a score.
    • Matching products — AI suggestions including imagery.
    • Lifestyle images — approve or reject each generated image.
    Review modals per job type

    Real-world example

    500 products with a diff view next to the old Shopify text. For G&F Verpakkingen, the shop manager could immediately see the difference per shipping box between the old, inconsistent description and the new version with size and flute type.

    By spot-checking 20 products first, the remaining 500 could be approved in bulk with confidence.


    3Bulk price updates

    Select products and choose More actions → Update prices. Three methods are available:

    • Fixed amount — increase or decrease by e.g. €2.00.
    • Percentage — e.g. +10% or −5%.
    • Fixed price — set all selected variants to the same amount.

    You see a preview of the new prices before confirming. For single products, use the variant price editor in the product detail view.

    Bulk price updates

    Real-world example

    Paper price correction: +0.25 euro on 180 products. Select the products, choose "More actions → Adjust prices", enter + 0.25 (or +5% / fixed price) and push to Shopify.

    Want them live immediately? Set the status to Active in the same flow — that always asks for confirmation first.


    4Starting a sale campaign

    Select products in the product list and choose Start sale campaign. In the modal you set your rule:

    • Percentage — for example 20% off all selected variants.
    • Fixed amount — for example €5.00 off every variant price.
    • Fixed price — set all variants to the same sale amount.

    Optionally round to .95 or .99. You see a preview of the new prices before you start. The campaign then runs as a server-side bulk job; follow progress in the bar at the top and per product in the job logs.

    Starting a sale campaign

    5Compare-at prices and sale tags

    Pshly.ai not only sets the new price, it also fills the compare-at price with the original price. That makes the discount visible everywhere: a struck-through price on the product page, sale badges in collections and the correct sale price in your product feeds.

    • Did a variant already have a compare-at price? You choose whether it is kept or overwritten.
    • A sale tag marks all products in the campaign so automated SALE collections and theme badges are instantly correct.
    • When the campaign ends, price, compare-at price and the sale tag are all restored.
    Compare-at prices and sale tags

    6Ending and reverting a campaign

    Before anything changes, Pshly.ai takes a snapshot of the original price and compare-at price per variant. You find all campaigns under Products → Sale campaigns.

    • End campaign starts a server-side job that restores every variant to the captured values exactly.
    • An ended campaign can be re-activated for the same selection with Re-apply.
    • Failed variants appear per product in the job logs, including the reason — and you can retry them.
    • Deleting is only possible once a campaign has ended, so sale prices never stay behind in Shopify.
    Ending and reverting a campaign

    7EU 30-day rule and price history

    In the EU the displayed compare-at price must be the lowest price of the past 30 days. Pshly.ai records the price per variant in the price history on every sync and every price change.

    • When creating a campaign we warn you if the chosen compare-at price is higher than the lowest price of the past 30 days.
    • That prevents a compare-at price you cannot substantiate afterwards.
    • The history is kept after a campaign ends, so follow-up campaigns can be substantiated too.
    EU 30-day rule and price history

    8Setting products to Active (with confirmation)

    After pushing content you can set products to Active in Shopify in bulk.

    • Select products and choose More actions → Status → Active.
    • An extra confirmation step always shows how many products will go live.
    • Products that are already active are skipped.
    Setting products to Active (with confirmation)

    Real-world example

    48 draft shipping boxes set to Active in one go. After the new seasonal collection was enriched for G&F Verpakkingen, the team used "More actions → Status → Active" to publish the products together.

    The extra confirmation step prevented the products from accidentally going live before prices were checked.


    9Excluding products from optimisation

    Seasonal or temporarily offline products don't need to reappear in every review. There are two ways to exclude them:

    • Via a Shopify tag — add the tag pshly-skip (configurable under Settings → Shopify). Tags are picked up on every sync, so you can assign them in bulk in Shopify.
    • Manually in Pshly — via More actions → Exclude from optimisation, also for a whole selection.

    Excluded products get an Excluded badge, disappear from the work list and are filtered out of bulk jobs. Use the filter All / Active only / Excluded only to bring them back.

    Excluding products from optimisation

    Real-world example

    Christmas packaging in July. 48 seasonal products were offline but kept returning in every review. With the Shopify tag pshly-skip they disappear from all bulk jobs and review modals.

    Remove the tag in November and the next import picks them up again automatically.


    10Duplicate protection on pushes

    Pshly prevents the same content or image from reaching Shopify twice.

    • Repeated pushes of the same product within seconds are ignored server-side.
    • Lifestyle images that already have a Shopify image ID or status pushed are skipped.
    • Bulk jobs deduplicate their product list before starting.
    • Products deleted in Shopify are flagged as deleted in Shopify instead of failing the job.
    Duplicate protection on pushes

    Real-world example

    The same shipping box selected twice, one push executed. When a product for G&F Verpakkingen accidentally ended up in a bulk run twice, the debounce ignored the second push within seconds.

    The 512 product photos with an existing Shopify ID were also skipped, so no duplicate images ended up in the media library.