Skip to content
PriceCalc Pro
  • DEEN
  • ← Home
‹ Home

📖 User Manual

Updated: August 2026

OverviewPurchase PricesPrice list importCalculation FactorsVendorsArticle CalculationBackupSettingsSubscriptionFeedback & ContactTips & Notes

🧮 Overview

The Artikelkalkulation app enables central management of purchase prices, calculation factors, and selling prices for all products in your Shopify store. The app consists of four areas accessible via the sidebar menu or the tabs at the top.

AreaFunction
💶 Purchase PricesView and update purchase prices (unit cost)
🧮 Calculation FactorsMaintain factors centrally per vendor or category (from Premium)
🏷 Article CalculationManage factors, calculate selling price and push to Shopify
💾 BackupExport or restore a data backup
⚙ SettingsConfigure autosave, price rounding, VAT, auto-backup and language
⚠ All changes are permanently saved in Shopify. Always create a backup before making large batch changes.

First-Run Setup Wizard

On first launch the app shows a setup wizard that walks through 6 steps: backup settings, autosave (including delay), VAT rates, price rounding, and the disclaimer. The wizard can be skipped ahead to the disclaimer step via 'Skip' — the disclaimer must be confirmed with a checkbox before the app can be used.

💶 Purchase Prices

Shows all products and their variants with the current purchase price (unit cost) from Shopify. The cost price is stored in each variant's inventory (inventoryItem.unitCost).

⚠ On first use a notice appears warning that batch price changes are permanent in Shopify. It must be confirmed once per browser session.

Loading Data

On first opening the tab the first 25 products are loaded automatically (default). The load limit can be adjusted directly in the filter row. A progress bar shows the loading status. The tab caches loaded data – a reload only occurs when data has changed in another tab.

Load Limit

The 'Load limit' dropdown on the right side of the filter row controls how many products are loaded initially: 25 / 50 / 100 / 250 / All. Default is 25 — ideal for large catalogs. When a collection or tag filter is active, all matching products are always fetched from Shopify regardless of the limit. A hint below the filters shows whether a limit is active, a filter loaded all matches, or all products are loaded.

Sorting

A 'Sort by' dropdown to the right of the load-limit control lets you sort by Name, Vendor, Cost status, or Variant count. Once a sort option is selected, two buttons ↑ (ascending) and ↓ (descending) appear. Sorting is applied after the active filters.

Filter & Search

  • Search field – filters products by name (local, only on loaded products)
  • All / With cost / Without cost – quick filters for data completeness
  • Collection – loads all products in the collection from Shopify (ignores load limit)
  • Vendor – loads all products from the selected vendor directly from Shopify (ignores load limit)
  • Tag – loads all products with the selected tag from Shopify (ignores load limit)

The ⊞ (expand all) and ⊟ (collapse all) buttons on the right side of the filter bar open or close all visible products at once.

Editing Prices

Expand a product, then change the cost price directly in the input field. Changed fields are highlighted in orange.

💡 Percentage Adjustment: Two levels: The global percentage (top toolbar) is applied to all visible products at once. The per-product percentage (inside an expanded product row) applies only to that product's variants. Enter e.g. +5 or -10.

Status badges

Each product shows badges in its title bar indicating the status of its variants at a glance — even when the product is collapsed.

  • Red – No price: At least one variant has no purchase price. The number shows how many variants are affected.
  • Orange – Changed: At least one variant has been edited but not yet saved.
  • No badge = all variants have a saved purchase price and no pending changes.

Saving

Save all (bar at the bottom, from the Basic plan) saves all changed unit costs in one batch. A confirmation dialog appears first. Individual products can also be saved one by one (Free plan and above). The Cancel button next to Save all discards all pending changes and restores the last saved state — available on all plans. Each saved product counts as one unit against your monthly quota.

⚠ Before clicking Save All, always create a backup first – the dialog provides a "Backup now" button.

Zero-price warning

⚠ If at least one variant in the selection has a unit cost of 0, a warning dialog appears before saving. You can confirm or cancel — a unit cost of 0 is technically valid but should be set intentionally.

Automatic Pre-Save Backup

The browser can automatically download a JSON file with the original values before save operations. This behaviour is configurable in Settings under 'Automatic backup' (Never / On batch save only / Always). Downloaded files can be restored via the Backup tab.

Automatic Saving (Autosave)

When autosave is active, changed cost prices are saved automatically after the configured delay — without clicking Save manually. Whether autosave is on and which delay is active can be read and changed directly in the status bar. Each automatically saved product counts as one unit against your monthly quota.

🔒 Autosave is available from the Premium plan onwards.

Status bar

A compact status bar is embedded in the sticky filter area, to the left of the session row. It shows whether autosave is active, the selected delay, and the current state (pending / saving / last saved HH:MM:SS). Toggle and delay can be changed directly in the bar without opening settings.

Calculation Factor at a Glance

The saved calculation factor or advanced percentage values are shown inline in the collapsed product header — e.g. Factor: 2.50 or BK: 5% · GZ: 20%. This lets you see the calculation status without expanding the product.

Work Sessions

Work sessions let you track editing progress across multiple sittings. Whenever a product is saved, the app marks it as processed in the active session. Sessions are stored in the browser and persist after the window is closed.

Creating and Using a Session

  1. Set a filter or collection first, then click New Session and enter a name. The name is automatically prefixed with EK_ (Purchase Prices) or VK_ (Article Calculation).
  2. Saving a product automatically marks it as processed in the active session.
  3. Use the pill buttons (All / Processed / Unprocessed) to filter products by status — only products within the session scope are counted.
  4. End deactivates the session for this tab only – the session and other tabs remain unaffected.
  5. Delete permanently removes the session from the browser. A confirmation dialog prevents accidental deletion.

Multiple sessions can exist simultaneously. The dropdown lets you switch between them. An EK session also activates automatically in the Kalk tab if no session is running there yet.

Session Scope

When a session is created, the app stores the active filter (collection, tag) and the IDs of visible products as its scope. The progress counter shows processed / scope size instead of processed / all loaded products.

Scope Banner

When switching to a tab where the active session has a different filter than currently loaded, a blue banner appears showing the scope filter and size. Clicking Load now restores the matching filter automatically. The × closes the banner without reloading.

🔒 Work sessions are available from the Unlimited plan.

Excel Export / Import

Two buttons in the Purchase Prices tab enable Excel-based workflows: Excel Export creates a .xlsx file with all currently visible variants. Columns A–D (Variant ID, Product, Variant, SKU) are locked and shaded grey; column E (unit cost) is editable and highlighted green.

Re-import the edited file: the app reads column E, compares each value to the currently displayed cost price, and only applies rows with actual changes. Result summary: X applied · X skipped (no change) · X errors. Rows with errors are listed in an error modal and marked with a red X in the variant list; affected products expand automatically.

💡 Skipped rows (empty cost column or value already matches) are never written to Shopify. The error log can be downloaded from the error modal if needed.
🔒 Excel Export / Import is available from the Premium plan.
📥 Reading a price list: to take unit costs straight from your supplier file there is a section of its own: Price list import.

📥 Price list import

Take unit costs straight from your supplier's file — Excel or CSV, whatever its layout. The “Price list” button sits next to Export and Import; on the start page the Price list import card leads to the same place and opens the file dialog right away. Available from the Premium plan. Readable formats are .xlsx, CSV and text files, as well as HTML tables that some systems export under an .xls name. The old .xls Excel format itself cannot be read — open the file in Excel and use „Save as“ to store it as .xlsx or CSV. The app detects the format from the content and tells you when this step is needed.

No guarantee for every list The import is built to understand as many shapes of price list as possible — with or without a header row, in any column order, with section headings, footnotes and a cover sheet. That is not a promise that it copes with every file. So before you apply anything, check the detected columns and the block summary — you can change both, and until then the import leaves your articles untouched. The cases that typically need a hand are listed below under „Where the import reaches its limits“.

How to get the best results

The import can do a great deal, and almost all of it is optional. This order gets you there most reliably — above all because two things must be done before creating: the number pattern and the key table. Afterwards they cannot be added without deleting the created articles again.

  1. 1 · Prepare the file
    The import has the easiest time with a plain table: one header row, article rows below it, no merged cells. Save an old .xls as .xlsx in Excel via „Save as“; a table inside a PDF has to be extracted first. Only one sheet is read — the one with the most data. A cover sheet is therefore harmless, but a second price sheet is left behind.
  2. 2 · Set the vendor
    Enter the vendor before loading the file. Number patterns, EAN prefixes and the calculation factors for prefilling all hang off it. Without it the app works without that prior knowledge.
  3. 3 · Load the file and read the block summary
    Above the change list you see „N blocks · N data rows · N skipped“. That is your first check: does the number of data rows roughly match what is in the file? Expand the skipped rows — header rows and section headings belong there, articles do not.
  4. 4 · Check the columns
    Above that you see which column was detected as article number, unit cost, description and EAN, each with a sample value. If one is wrong, change it — everything else depends on it. If the list carries a running position number on the far left, check the article number with particular care.
  5. 5 · Review prices and EANs — this costs nothing
    The change list shows old and new unit costs and proposed EANs. Read, deselect what you do not want. Nothing is written until you trigger it.
  6. 6 · Create the number pattern — now, not later
    Describe how the supplier builds its article numbers. The pattern decides whether five rows become one article with five variants or five separate articles. Both are fine — but it cannot be changed afterwards without deleting and recreating the articles.
  7. 7 · Fill in the key table, titles and product organisation
    For each option segment, record what the codes mean (204 = Yellow). If you already carry the supplier, the table fills from your own catalogue at the press of a button. The second and more important table sits at the product segment: per product code you set title, product type, collections, product category and tags — once, and every article created from it carries them. The title replaces the description from the file, which translates a foreign-language list in one go. All of this only applies when creating — afterwards you would have to add it to each article by hand.
  8. 8 · Extend first, create second
    Rows belonging to an article you already carry appear as extensions in their own section. Do those first: they shrink the list of supposedly unknown rows and prevent a second article with the same product key.
  9. 9 · Mark the runs
    Every unknown row starts on „do not create“. One click makes a row the main article, the following ones belong to it. The run ends at the next row set to „do not create“ and at a block boundary. Check the figure above the list: it says how many articles with how many variants would come into being.
  10. 10 · Apply
    Only here is anything written, and only here does quota apply. Everything before — reading, matching, preview — is free.
What most often goes wrong
Pattern created too lateThe most common avoidable mistake. Creating first and building the pattern afterwards means: delete and start over.
Clicked „Create“ without marking anythingNothing happens — by design. Everything starts on „do not create“ so that one careless click cannot produce a hundred drafts.
Looked for the loaded price list in the pattern editorIt is not saved. It only supplies the example numbers and lasts as long as the editor is open.
Expected it all in one goYou can work through the list in several goes — your stock moves along right after each write.

How matching works

The app compares every column of the file against your SKUs and EANs and picks the column with the most hits. Headers play only a minor role — so it also works with files that have no header row or are in another language. Matching runs against your entire catalogue, not just the page currently loaded.

NotationArticle numbers match even when written differently: with dots, hyphens, spaces or leading zeros.
EAN takes precedenceIf the file carries an EAN and the product a barcode, that is used — an EAN is unique worldwide, an article number only within your shop.
What counts as an EANShopify's barcode field accepts any text, and in established shops it holds home-made codes alongside real EANs: internal numbers, shelf codes, short digits. A digit sequence therefore only serves as a key from eight digits up, and an article number is read as an EAN only when its check digit holds. Otherwise a five-digit number from the price list would sooner or later hit an identical house number in a barcode field. There is deliberately no restriction to exact EAN lengths, though: anyone who took their barcodes from the same supplier file carries the same odd number as the list — those matches are correct and remain. Products that drop out of EAN matching are not lost; they are still found by their article number.
Ambiguity is skippedIf two of your article numbers collapse to the same value once separators are removed, the row is skipped and listed — so the wrong product is not overwritten.

Data blocks: what counts as an article row

Price lists are rarely one continuous table. Above the data sit logo, title and year; in between are section headings per brand, repeated header rows, totals and footnotes. The app therefore classifies each row individually: a row counts as an article row when the price column holds a readable number. Adjacent article rows form a block. Above the change list you see the result — for example „3 blocks · 412 data rows · 27 skipped“. Expanded, it lists every skipped row with its row number, label and reason.

💡 The gain is not the filtering but the detection: because only article rows are measured, header rows and section headings no longer dilute column detection. Two cases cannot be decided by price alone, and both have a manual fix. An article without a price („on request“) appears among the skipped rows and can be recovered there with bring in. A totals row carries a price and therefore looks like an article; the × in the draft list takes it out. Both choices are remembered even if you remap the columns afterwards.

Assigning columns yourself

Above the change list you see which columns were detected, each with a sample value from your file. If something is wrong, change it there — matching is recalculated immediately. If nothing matches at all, simply pick the article number column; all rows then count as new products. If your file holds several worksheets, the one with the most data is read — so a cover sheet left behind by a conversion does no harm.

Where the import reaches its limits

Detection measures instead of guessing: it compares every column against your catalogue and goes by the numbers in the rows, not by the headings. That makes it cope with remarkably different files — but not with every one. The cases below are the ones that typically cause trouble. Nearly all of them can be solved, either in the file itself or through the column assignment.

Old .xlsThe old Excel format cannot be opened. The app detects it and tells you; save the file as .xlsx or CSV in Excel.
PDFA PDF is not a table. The app reads it as text and no usable columns come out. Extract the table first (in Excel via Data → From PDF) or ask your supplier for a spreadsheet.
Several price sheetsFrom an Excel workbook the sheet with the most data is read. If the workbook carries one price sheet per brand, save the sheets separately and load them one after another.
Merged cellsA cell merged across several rows carries its value only in the first row — the others end up without an article number. The same goes for headings spanning two rows. Excel can undo both in one go.
Several numeric columnsIf the unit cost is not alone — quantity tiers, RRP, weight, stock, minimum order —, the app takes the column with a matching heading, otherwise the rightmost one. That is often right, but not always. The sample value above the change list settles it in two seconds.
Text in the price cellIf the price column holds no readable number („on request“, „12.50 € per 100 pieces“), the row does not count as an article row. It shows up among the skipped rows with a reason and can be pulled back in there — you then set the price yourself.
Three decimal places„1,234“ is read as 1234: price lists rarely quote tenths of a cent, but they often use thousands separators. If your supplier works with three decimals, change the number format before loading.
Currency and unitThe app reads numbers, not currencies: a currency symbol is stripped, nothing is converted. Whether a price is per piece, per 100 or per case is not in the number either — it is taken exactly as it stands.
Discount listsA list that quotes percentages instead of prices (a discount scale off the RRP) cannot be resolved by the import. Convert it into prices beforehand.
Ambiguous numbersIf two of your article numbers collapse into one once dots and dashes are removed, the row is deliberately left out and listed. That is not a glitch but the brake that keeps the wrong article from being overwritten.
Too few hitsIf the best column finds one of your articles in fewer than 15 out of 100 rows, it does not count as an article number. With a list of nothing but new articles that is normal — assign the column by hand.
Shortened EANs without a prefixIf the list carries only the last digits of an EAN, the app needs the supplier EAN prefix you stored. Without it nothing is taken from such a column — better no EAN than a wrong one.
Text files without a delimiterA text file needs a delimiter: semicolon, comma, tab or pipe. Columns that are merely aligned with spaces cannot be split reliably.
Unusual character setsCSV is read as UTF-8, with ISO-8859-1 as a fallback. More exotic encodings can mangle accented characters. Matching hardly suffers from that, but the titles of newly created articles do.
💡 If a list resists: try it on a short extract — twenty rows are enough to see which columns are detected. It costs nothing and changes nothing. If it still resists, the same move nearly always helps: open the file in Excel, copy the plain table part without cover graphics and merged cells into a new sheet, and save it as .xlsx.

Change list

Nothing is written until you trigger it. Beforehand you see every change with its current and new value and can deselect individually or by group. Products whose unit cost already matches do not appear at all.

Prices from equally priced products

Many suppliers list a product only once when an option does not change the price — every length, say, but not every colour. So your remaining colours are not left without an update, you can mark individual parts of the article number as not price-relevant in the number pattern. The preview then shows the prices taken over that way in a section of their own and names, for each row, the product the price comes from. Those products also count as covered and no longer appear in the list of possible discontinued items; the coverage figure states how many of them were only reached indirectly.

⚠️ If the file names two different prices for two products that differ only in a part marked as not price-relevant, nothing is taken over for them. The contradictions appear in a box of their own — check whether that part does affect the price after all. The file's direct matches are unaffected.

Adding EANs

If the list carries an EAN and the product has none, it is proposed for import. If an existing EAN differs, it goes into a separate section — never preselected, and only after explicit confirmation. A differing EAN usually means the supplier refers to a different product, or one of the numbers is wrong. An existing EAN whose check digit adds up is never replaced by a code that is not itself a valid EAN, though — that could only make things worse, so such rows are not put to you at all.

Creating unknown products

Rows that match none of your products are not an error — a supplier list almost always contains products you do not carry. You can create them as drafts: invisible in your shop, with SKU, EAN and unit cost. A tag is mandatory; it lets you find the new products again as a group later, including to delete them if needed. Rows without a price are usually section headings in the price list; they stay visible and are marked „no price“, but stay on „skip“ — even when a main product stands above them. Otherwise a heading would become a variant purely because of where it sits. If you click such a row explicitly, it counts all the same. The list is sorted by article number within each section of the price list rather than by the order in the file. The sections themselves — usually one per brand — stay in file order, so the supplier's own structure is preserved. Related articles therefore sit together — and the runs pick them up instead of passing scattered rows by. Your stock also moves along right after drafts are created: the new articles count as present from then on. If the same product key turns up again later — in a second block, in another colour, say — the row is recognised as a missing variant of the article just created rather than as a second article with the same key. You can therefore work through the list in several goes. Above the list you also see how many of the marked rows match no pattern. Those become single articles carrying only the import tag — without a pattern hit there is no code a tag could belong to. An article with just one variant is not affected: as long as its number matches, it gets all the tags.

Number patterns: several rows into one product with variants

Many suppliers encode colour or size in the article number — in 204.2330.13, 204 is the colour, 2330 the product and 13 the length. Under Number patterns in the creation area you describe that structure once per supplier, either by separator or by position. Each segment gets a role: Product decides which rows belong together, Option becomes a variant axis such as colour or length, Marker tells articles apart as well without becoming a variant axis itself, Ignore is left out. Shopify allows at most three option parts per product; if more than three parts are set to option, a notice states the exact count and the surplus ones are left out when creating. There is always only one product segment: pick „Product“ for a second one and the previous one automatically becomes a marker — it keeps telling articles apart, just without silently changing the grouping. The rows then become one product with variants instead of many separate items. You can define several patterns per supplier; only those of the selected vendor apply when creating. If the same number matches more than one of your patterns, a notice shows how many numbers that affects — this usually means a split segment was intended, making one of the two patterns redundant. If two do apply, the more precise one wins: the one that pins down more characters and splits them more finely. So the order in the list does not decide, and an older, open pattern never crowds out a newer one. The same pattern can also be prepared up front in the Vendors tab — there with your own article numbers as examples, so no list needs to be loaded. When you switch between separator and positions, the segments are re-derived — roles, axis names and finished mappings are kept. The segment length is visible and editable either way; with a separator it may stay empty („any“), while a fixed value narrows the pattern and keeps several patterns of the same supplier apart. For a supplier whose articles you do not carry yet, the pattern editor offers Load price list: the file then provides the example numbers and the codes for the key table. Which column holds the article numbers is detected automatically — among the data rows the app picks the column whose values repeat least, because an article number occurs once while a blade length occurs often. If the choice is wrong, change it; the list shows every column with its first values. Stock and file keep separate hit counts, so you see whether your pattern only fits what you already carry or also what the supplier ships today. The file is not saved; it lasts as long as the editor is open. A running position number on the far left („Pos.“, „line no.“) is passed over: it is recognised by starting at 1 and rising in steps of one — the heading plays no part, and a count that restarts in every section counts just the same. If consecutive numbers are the only number column in the file, they are used anyway; they are the article numbers then. If instead every number repeats — as in a tiered price list with several price levels per item — nothing is preselected: no column is demonstrably the right one, and a wrong preselection would be worse than none. Map the columns yourself in that case. Either way the per-column preview shows the choice; switch over if it is not right. Remember to save: until then a pattern lives only in the open session. That is enough to create with, but after reloading the app the mappings and tags are gone — and the created article would carry only the import tag, with nothing to say why. Unsaved changes are flagged at the top, and the close button says so too. If a pattern does not split cleanly, that is stated in red beside it — it is saved regardless, and the button then reads „Save anyway“. So a second, half-finished pattern is never a reason why the finished first one cannot be saved; a pattern with an unfinished split simply matches nothing until it works out.

💡 Lookup table: For every segment with the role Option you record what the supplier codes stand for — one mapping per line, in the form code = value. Several codes may point to the same value, for example 204 = Yellow and G14 = Yellow, which is what makes variants from different series line up under one colour and match the option values already present in your shop. Codes you do not list pass through unchanged. A code = value mapping exists only for the role Option: the product segment only groups and is never displayed — if a mapping applied there, two different products could silently merge into one; a marker translates nothing, and an ignored segment means nothing. Tags, by contrast, can be stored on the product segment and on a marker as well, each behind its own button. The match count and three sample mappings are shown live before you save. How many codes still have no label is shown as well — with thirty mapped codes a few blanks are otherwise easy to miss. Such a code appears on the variant exactly as it stands in the article number. Without a pattern every row becomes a single product — not wrong, but nothing gets grouped. The axis name can be picked from the axes that already exist in your shop, and below the key table you see how many of your target values are already present there. If one differs only in spelling (“yellow” instead of “Yellow”) it is named and can be aligned with one button — that is exactly what the table is for: the supplier's codes should point at values that already exist, rather than growing second spellings beside them. The mapping happens in a table: on the left the codes that actually occur in the article numbers — so you do not have to write them down from memory — and on the right you pick the value from those that already exist in your shop. If you already carry products from this supplier, the table fills itself at the press of a button: a variant carries the supplier number as its article number AND the option value, so the mapping falls out. If a code is used inconsistently across your products, that is noted beside it rather than silently taking the majority — the segment may then not mean what you assume. The mapping belongs to the supplier axis, not to the individual pattern: create a second pattern using the same axis and what you already entered is there — you see what is done and type nothing twice. A change then applies to every pattern of this supplier using that axis; the table says so as soon as more than one is affected. Per key and for the pattern as a whole you can also store tags. When creating, they are collected across all variants — a knife available in yellow and red carries both colour tags. The suggestions come from your shop so that two spellings of the same word do not grow side by side; you can still type anything. The tag from „Tag for the new articles“ is always added — it is how you find the new articles together later. The product segment has its own Tags button for this: it lists every product code with a description from the list, so you can file 2330 as a steak knife and 5540 as a peeler separately. The field above remains alongside it — it applies to every article of the pattern, „cutlery“ for instance. A marker row has a Tags button too: a marker never becomes a variant axis, yet it says something about the article — if an S in that position stands for the safety grip, every number carrying an S gets that tag. Because a marker with the length „any“ can take several values, this is a table as well: one value per row, with the tags picked from the ones your shop already has. Numbers without the marker get nothing, which is why the empty value is not listed. The name field beside it merely labels what the position is about; it never turns into a tag. Tags hang off the article number rather than the way rows were grouped: a group put together by hand gets them too, as long as its numbers match a pattern. A row matching no pattern becomes a single article and carries only the tag from „Tag for the new articles“ — without a pattern there is no code a tag could belong to. Tags are only ever set when creating; the import never changes them on existing articles. If you added tags to your pattern only later, the articles already created stand there without them. That is what the add tags from the pattern section is for: it lists existing articles missing tags, with what they already have and what would be added. Nothing is preselected — these are your articles. Adding a tag overwrites nothing, which is why it is allowed here while price and EAN are treated with restraint on existing articles. The import tag stays out of it; it marks new articles. At the product segment, next to the tags, there is a title per product code. It replaces the description from the file when creating — „Faca para esfolar/ Skinning knife“ then becomes an article named „Boning knife“ in your shop. That way you translate a foreign-language supplier list once and for all instead of renaming every article afterwards. Leave it empty to keep the file description. How many product codes still have no title of their own is shown as well — without a mapping, the article title is then built from the common prefix of the labels from the list. At the product segment, next to the tags, you also find product type, collections and product category — the same four fields Shopify groups under „product organisation“. Product type and category are simple: whatever sits at the product code beats the setting for all. Collections accumulate instead, like tags. A collection that does not exist yet is created on the spot; an automatically filled one is not offered, because nothing can be added to it. The product category comes from Shopifys fixed list and is searched — in your shop language. The title also pre-fills the article description, so a new draft does not sit empty in your shop.

Completing shortened EANs

Some suppliers print only the trailing part of the EAN in their price list — the leading part is the same for all of their articles and usually appears as a barcode on the letterhead. When the app spots such a column it first tries to work the start out on its own: it checks the starts already remembered, and otherwise derives it from your own products — if you already carry one article from this supplier with a complete EAN, the missing start falls out exactly. Which one fits is decided by the check digit, not by the supplier's name. If it adds up, the start is proven and applied right away. Otherwise the app asks: you can type it in or have it worked out from your own products, and then see for how many rows it adds up. As long as no start is available the shortened values stay unused — they are fragments, and are neither matched to a product nor written to one. A column counts as shortened even when it is properly titled “EAN”; what matters is the content, not the heading. Once applied, the start can be remembered per vendor. You can also store the start up front in the Vendors tab, and several per supplier there — necessary when a dealer carries other brands, since the start belongs to the brand owner.

Several EAN starts within one file

An EAN start belongs to the brand owner, not to your supplier. Buy from a wholesaler and one price list will carry several starts side by side — one per manufacturer. The app applies them all at once, and what matters is the count rather than the share of the file: every start that explains at least five rows counts as proven, and any number of them count alongside each other. Five rows resolving with the same start is no longer coincidence, and the size of the file makes no difference to that. The decision is then taken row by row, not once for the whole file.

What you see afterwards

You see which start explained how many rows, and how many rows were left open. That makes the message checkable rather than merely reassuring: if a striking number of rows stay open, a manufacturer is missing — add its start under the Suppliers tab and load the list again. Open rows are not errors; they simply get no EAN and are still matched by their article number.

⚠️ Two readings means: no EAN. If two starts both yield a valid result for the same row, that row is left without an EAN. This is deliberate: a gap can be filled in later, whereas a wrongly matched product may never be noticed. The case is rare, but it is not a glitch — the check digit cannot tell certain starts apart arithmetically, and the app would rather not decide at all.

Inferring the supplier

The app infers the supplier from a recognised start only when all starts found belong to the same profile. With a wholesaler a start identifies the manufacturer — it says nothing about the supplier, and nothing is guessed here.

Already correct

Rows that match one of your products but change nothing sit in their own collapsed section. They used to just disappear — leaving it open whether a product had been checked or had fallen through the matching. Nothing to do there.

Discontinued products: what the list does not name

The question the other way round: which of your products do not appear in the list? On its own that would say nothing — a list for a single product group would otherwise declare half your assortment discontinued. What counts is the coverage: how many of your products from this supplier does the file name at all? At 43 % it is an extract and says nothing about the rest; at 97 % the missing 3 % are an indication. The rate is always shown, even when it does not support a conclusion — the app says so explicitly rather than staying silent. You do not need to confirm that a list is complete: the numbers show it.

Time counts too. Per supplier the app remembers which products were missing from recent lists — only the missing ones, which are few. If the same product is missing for the third time in a row, that is given as the reason, along with the date it was last included. On a supplier's first import this hint naturally does not exist yet; it becomes useful from the second time onwards.

⚠️ It stays a suspicion, not a verdict: the app changes nothing on these products, neither status nor tags. You check and decide.

Runs: grouping with one click

All unknown rows start as skip (red) — so nothing is created without your action. In the Run column a click makes a row the main product; that activates it, and every row below belongs to it until the next main product — one click per group instead of one per row. Further clicks step on: single product (created, but not grouped) and, below a main product, back to red. There is no separate tick box for selecting any more — it would have been a second list for the same question and would inevitably drift apart. Create groups turns the marks into real groups that you can refine below. If no belonging row follows a main product, no group is formed — the row becomes a single product. That is not an error, and the list says so: the marker then reads “stays single” instead of “Main product”. With two main products directly in a row this necessarily applies to the first. A run ends in three places: at the next main article, at a row set to do not create — everything below follows suit — and at a block boundary. To carry on below, set a new main article there. Removing a single row from the middle while keeping the rest is no longer possible; in exchange it no longer costs dozens of clicks when you only want the first rows of a section.

Suggestions

The app searches the list for runs itself, using the description. If consecutive rows share a long common beginning they belong together, and what remains is the option value: “Kochmesser 20 cm” and “Kochmesser 24 cm” become the product “Kochmesser” with the values “20 cm” and “24 cm”. A shared article-number beginning alone is never enough — “12345-01 Kochmesser” and “12345-02 Bratengabel” share one but are two products.

💡 Suggested only, never created: no suggestion is preselected; only your click on Take suggestions sets the marks. In doubt the app suggests nothing — a missed run costs a few clicks, a wrong one costs trust in all the others. Proposals only appear where the descriptions differ — the option value is read from what follows the common prefix. If your supplier writes the same description for every size and the size lives only in the article number, there is nothing to propose here; that is what the number pattern is for. Your own marks are left untouched when you apply proposals.

Existing options from your shop

Axis names and values that already exist in your shop are offered in the fields, so “Farbe” and “Color” do not end up side by side. If a derived value matches an existing one apart from spelling, a button with the existing version appears next to it: “20cm” and “20 cm” are the same value, and without that hint every size grows a spelling variant beside it in your shop. Taking it is an offer, not a requirement.

New supplier: nothing in the shop yet

Normally the app spots the article number column by how many values match your own products. With a supplier you do not stock yet there is nothing to measure against — the list used to come up empty and you had to assign the column by hand. If you prepared the supplier in the Vendors tab, that is no longer needed: first the supplier is identified from the stored EAN start — proven by the check digit, not guessed — and then their number pattern finds the article number column. No product in the shop is required. Both only take effect when the result is unambiguous; otherwise you assign the columns yourself, as before.

Adding variants to existing products

If you have defined a number pattern, the app also checks whether an unknown row belongs to a product you already carry — one where only this single variant is missing. The detection is exact: the article numbers already in your shop are read through the same pattern, and if the product key comes out the same, it is the same product. Such rows appear in their own section and are not created as new drafts. As soon as you have applied variants, the list rebuilds at once: the created variants count towards your stock from then on and are not suggested again. Nor do they remain among the unknown rows — they now count as assigned.

⚠️ Never preselected: Unlike a draft, this touches products that are visible in your shop. Only what is unambiguous and possible without restructuring is proposed — the product must already have the same option axes, and the combination must not exist there yet. Everything else is listed with a reason and can still be created as a draft under „Not in your range“. One save is counted per product, not per variant.

Extending products that have no variants

If you already carry the product but without variants — the most common case — it has to be converted to variants first. The app offers this, but confirmed individually per product, with an extra prompt before anything is written. You see beforehand which option axes will be created and which values the existing variant will receive: those from its own article number, read with the same pattern. It keeps its price and article number. Afterwards the app checks what the product actually looks like — if the result does not match what was expected, it stops for that product rather than writing variants onto the wrong axis.

💾 Structure snapshot and undo: Before converting, the app automatically downloads a JSON file with the previous state of the affected products — option axes, option values, EAN, status, tags, prices, unit costs and the calculation metafields. If the snapshot fails, nothing is converted. The file writes nothing back; it documents how things were. Right after converting, an undo also appears: it removes exactly the variants and axes this run created, and nothing else. It only applies while the view stays open — once you leave it, the snapshot remains as the record. Note that an ordinary backup restores values, not structures, and a deleted product can never be brought back.

Grouping rows by hand

Not every article number follows a scheme. In that case simply select the rows that belong together and press Group selected. You give the product a name, name the option axis — size, for example — and enter a value for each row. If a field is left empty the article number takes its place, so the variants always differ. Groups made by hand take precedence over a pattern, and above the table you can see at any time how many products your selection will produce. When building, rows set to „on its own“ stay marked and are created along with the rest — a group needs at least two rows, but a single article is a valid outcome and must not be lost along the way. The message states both figures.

Pre-filling new drafts

If a preset exists for the given vendor in the Calculation factors tab, new drafts are bound to it right away — calculation mode vendor-based — and the selling price is calculated from the unit cost, either via the simple factor or via the advanced calculation including VAT and your configured rounding. Without a preset the drafts are created with no selling price and no binding: a price without a basis would be guesswork, and a binding without a preset would be broken from the start.

Unfinished assignments are not lost

Your decisions about a price list — marks, manual row decisions, groups you built by hand, selected rows and your selection in the change list — are saved continuously in your browser. If the app restarts or you leave the window, simply import the same file again: a notice appears at the top with the date and the number of decisions. Nothing is restored until you click — and „Discard“ deletes the record straight away. If you worked on a number pattern in between without saving it, that is part of the record too; the notice says so explicitly, because a pattern can change how the whole list is matched. On restore it is merged with what is in the shop, not written over it.

💡 Decisions are tied to the article number, not the row number. If your supplier inserts rows or re-sorts the list, your marks still sit on the right articles. Numbers missing from the new file are dropped — you are told how many when you restore.
⚠️ The file itself is not stored, only your decisions — so you have to pick it again. The record is offered by file name; whether the contents are still the same cannot be checked. It lives in the browser you worked in and expires by itself after 30 days.

Use of save operations

Reading, matching and the preview cost nothing. Only writing counts: one save operation per product whose unit cost or EAN changes, and one per draft created — regardless of how many variants it has.

🧮 Calculation Factors

Define your calculation factors once per vendor or category instead of maintaining them in every single product. Products pointing at such a preset pull their factors from it automatically. Available from the Premium plan.

Creating and maintaining presets

The Calculation Factors tab holds two tables: one for vendors, one for categories. Pick an entry from the list below and enter the values directly in the table. Only vendors and categories without a preset are offered.

💡 Presets are stored in your shop, not with the provider. They therefore survive a reinstallation of the app.

Calculation mode per product

Each product is calculated in exactly one way. There are no mixed forms. You choose the mode in the expanded product:

M — ManualThe factors stored in the product apply.
V — By vendorThe factors of the preset for the product's vendor apply.
C — By categoryThe factors of the preset for a selected category of the product apply.

On the collapsed row a badge to the left of the product name shows the chosen mode, so you can see how every product is calculated while scrolling.

If a product belongs to several categories with a preset, you choose in the product which one applies. With only one matching category it is preselected.

💡 Your manually entered factors are preserved even while V or C is active. Switch back to M and your own values apply again.

Switching many products at once

Bulk editing sets the calculation mode for all visible products at once — made for setting up large catalogues. Filter by the vendor or category first, then choose the Calculation mode field and the target mode. Products that cannot take it are skipped.

When a preset changes

When you change or delete a preset, an assistant shows every affected product with its current and new price. You have three options:

Decide laterThe preset is saved, the products keep their binding and are marked as Preset outdated. You work through the list later. Nothing is written.
Switch to manualThe products you exclude keep their price. The previously valid preset values are stored as their manual factors and overwrite the values held there before.
CancelNothing happens, the preset stays unchanged too.
⚠️ Switching to manual calculation releases the connection to the preset permanently and overwrites the manual factors previously stored in the product. That is why it requires an explicit confirmation.

Filters for preset products

Two additional quick filters appear in Product Calculation as soon as matching products exist: Preset outdated for products still saved with older preset values, and Binding broken for products whose preset was deleted or whose vendor was renamed.

Repairing broken bindings

If a vendor is renamed in Shopify, its products no longer find the preset. They continue to calculate with their own manual factors and are marked orange — so nothing is ever silently miscalculated. To repair it, switch the vendor in the preset row to the new name. The products are bound again immediately, without a single product having to be saved.

Use of save operations

Creating or changing presets uses no save operations. Only what is actually written into a product counts — prices, factors and switching the calculation mode. Searching for affected products in the assistant is free as well.

🏭 Vendors

Whatever holds true for a supplier in the long run goes here — up front, without a file. The start of their EANs and the structure of their article numbers belong to the supplier, not to a single price list. Entered here, the price list import finds them by itself. Available from the Premium plan.

Vendor list

Listed is every vendor set on at least one of your products — vendor is a standard Shopify field. Next to it you see the stored EAN starts and the number of number patterns. Open loads that supplier's products and opens their profile.

💡 Only that one vendor is loaded, not your whole assortment. If no product is found for the name, it probably appears only in product titles rather than the vendor field — you can then have the whole catalogue searched. With large assortments that takes a while, so it only happens at your request.

EAN starts

Some suppliers print only the trailing part of the EAN in their price list. You enter the leading part here — once, instead of with every new list.

Several starts per supplier are explicitly supported and often necessary: the start belongs to the brand owner, not the supplier. Anyone carrying other brands therefore has several. On import each start is checked against the check digit — one start too many costs nothing, it simply never adds up.

Suggest from your catalogue

If you already carry products from this supplier with barcodes, the app counts which EAN starts occur among them and offers each as its own group — with the number of products beside it, so you can see what the suggestion rests on. A start is offered once three products carry it. With a wholesaler you will therefore see several groups side by side: the start belongs to the brand owner, not to your supplier.

💡 Your catalogue does not reveal where the manufacturer ends and the article begins — if you carry only one series, the shared part is longer than the actual company start. Take therefore stores a group together with its shorter readings. One start too many costs nothing: on import the check digit decides which reading is right, and a wrong one simply never resolves.

If barcodes exist but no group emerges, the app says so explicitly instead of leaving the field empty. Enter the start by hand in that case — it is usually printed as a barcode on the price list letterhead.

Sample EAN

One complete EAN from a product of this supplier. It serves as proof: next to every start you entered, you see immediately whether it fits that EAN — without waiting for the next price list. The app also checks the sample's own check digit.

Preparing number patterns

The same pattern editor as in the price list import. If you already carry products from this supplier, their article numbers serve as examples; otherwise you load the supplier price list here instead. That lets you prepare a pattern and check it against real numbers before the supplier's first list arrives.

Splitting a section

If a section carries two things at once — say, a marker letter in front of the actual number — split it into two parts with "Split". The "yields" column shows immediately what each part produces from the sample. The app blocks two situations: two parts without a character count (the boundary would be guesswork), and fixed character counts that together exceed the shortest section seen in the samples. Until that is fixed, Save stays disabled and a red message explains what to do. After a split, only the parts' character counts count — the one on the whole section has no effect any more, even if it was pre-filled from the sample when the pattern was created. Use "Merge" to undo the split.

Price relevance

Every row of the table has a “Price-relevant” tick. It is set unless you change it and means: this part of the number affects the unit cost. Untick it to tell the app that products may differ here without the price being different — typically the colour, when the price list shows each product in one colour only. When a price list is read in, the remaining products then get the same price as the product that is listed. On the product section the tick is set and locked: a product code always affects the price, otherwise a product could inherit the price of a completely different one. As long as no tick is removed, nothing about the import changes.

Saving

Starts and the sample EAN are stored in your shop with Save profile. Number patterns are saved in the pattern editor itself. While something is unsaved, a note appears next to the button — switching vendors would otherwise discard the entries.

💡 Starts you remembered during an import earlier appear here automatically. You do not have to enter anything again.

🏷 Article Calculation

Calculates a new selling price from cost and factor and writes it directly to Shopify. The factor and a saved reference price are also stored as metafields.

⚠ On your first visit to this tab a notice appears reminding you to create a backup first and to test calculation factors on individual products. The notice is shown once per browser session.

Entering a Factor

  • Expand a product – enter the factor directly in the number field
  • − / + buttons change the value in 0.01 increments

Derived Factor

If no factor is saved for a variant but both cost and selling price exist, the factor is calculated automatically (selling price ÷ cost). A yellow banner offers to adopt this derived factor.

Cost-Change Detection

💡 The app checks on load whether the cost price has changed since the last calculation. Criterion: |factor × cost − saved reference price| > €0.02. Affected products are marked with the status 'Cost changed'.

Price Calculation

New price = cost × factor, rounded to the step configured in Settings (default: €0.05). Example: cost €12.00 × factor 2.30 = €27.60 → rounded to €27.60. The factor can be adjusted directly with the input field or the −/+ buttons.

Product Status

ReadyCost and factor present, price matches calculation
Cost changedCost price has changed – price must be recalculated
⚠ PriceCurrent Shopify price differs from the calculated price
No factorNo calculation factor set
No costNo purchase price available
SavedPrice has been calculated and saved as reference

Status Filters

Use the filter buttons to narrow down products by status:

AllShow all products
ReadyProducts where unit cost and factor are correct
ConflictProducts with a changed unit cost or a deviating price – action needed
No factorProducts without a calculation factor
Preset outdatedProducts still saved with older preset values (only appears when such products exist)
Binding brokenProducts whose preset was deleted or whose vendor was renamed (only appears when such products exist)

In addition to the status filter, dropdowns for collection, vendor and tag are available. All three trigger a server-side reload and fetch all matching products directly from Shopify — regardless of the configured load limit.

The 'Expand all' and 'Collapse all' buttons on the right of the filter area open or close all visible products at once.

Load Limit

The dropdown on the right of the filter row limits how many products are loaded initially (25 / 50 / 100 / 250 / All). The limit is ignored when a collection or tag filter is active.

Sorting

A 'Sort by' dropdown to the right of the load-limit control lets you sort by Name, Vendor, Status, or Calculation factor. Once a sort option is selected, ↑ (ascending) and ↓ (descending) buttons appear. Sorting is applied after the active filters.

Factor Display in the Product Header

The effective factor (simple mode: Factor: 2.50, advanced mode: BK: 5% · HK: 3% · GZ: 20%) is shown on a single line in the collapsed product header. With vendor-based or category-based calculation these are the values from the preset.

Advanced Calculation

In advanced mode (from the Premium plan) the simple factor is replaced by a formula chain: cost → landed cost (+ procurement %) → bar price (+ handling %) → + markup % → net price (÷ discount buffer %) → gross price (+ VAT %). Each percentage is entered directly in the formula header row of the expanded product table. The VAT setting (standard / reduced) is saved per product.

Work Sessions

Work sessions let you track editing progress across multiple sittings. Whenever a product is saved, the app marks it as processed in the active session. Sessions are stored in the browser and persist after the window is closed.

Creating and Using a Session

  1. Set a filter or collection first, then click New Session and enter a name. The name is automatically prefixed with EK_ (Purchase Prices) or VK_ (Article Calculation).
  2. Saving a product automatically marks it as processed in the active session.
  3. Use the pill buttons (All / Processed / Unprocessed) to filter products by status — only products within the session scope are counted.
  4. End deactivates the session for this tab only – the session and other tabs remain unaffected.
  5. Delete permanently removes the session from the browser. A confirmation dialog prevents accidental deletion.

Multiple sessions can exist simultaneously. The dropdown lets you switch between them. An EK session also activates automatically in the Kalk tab if no session is running there yet.

Session Scope

When a session is created, the app stores the active filter (collection, tag) and the IDs of visible products as its scope. The progress counter shows processed / scope size instead of processed / all loaded products.

Scope Banner

When switching to a tab where the active session has a different filter than currently loaded, a blue banner appears showing the scope filter and size. Clicking Load now restores the matching filter automatically. The × closes the banner without reloading.

🔒 Work sessions are available from the Unlimited plan.

Saving

Three levels are available: Per variant – Save button in the variant row (all plans). Per product – Save button in the product header (all plans). Saves factor, reference price and selling price. Save all – via the bottom bar (from the Basic plan).

Bulk edit

Bulk editing is available above the product list. Choose a field from the dropdown (calculation factor, VAT; in advanced mode also procurement costs, handling costs, profit margin and buffer; from Premium also the calculation mode), enter a value and click 'Apply to visible'. The factor fields only affect manually calculated products – for vendor-based and category-based ones the values come from the preset. A note below the controls states how many products are affected and how many are skipped. The change is staged and only applied when you save.

Save all

Save all in the bottom bar saves all products with pending changes at once. Available from the Basic plan; usage is counted per saved product. The Cancel button next to it discards all local changes and restores the last saved state — no server call, available on all plans.

Autosave

When autosave is active, changes to calculation factors and advanced fields are saved automatically after the configured delay — no manual save needed. Each automatically saved product counts as one unit against your monthly quota.

🔒 Autosave is available from the Premium plan.

Conspicuous calculations

The app compares each product's margin against the typical value for its vendor — or its category as a fallback — and reports outliers. Typos in the unit cost, forgotten factors or doubled markups surface before they cost you money for months. The check runs on already loaded data and uses no save operations. Available from the Basic plan.

below costThe net price is below the unit cost. Always reported, regardless of vendor or catalogue.
margin deviatesThe margin is well above or below what is usual for this vendor. The note states the comparison value and how many products it is based on.
no unit costNo unit cost is stored for the product, so a margin cannot be calculated.

Invalid barcodes

Every EAN carries a check digit at the end, derived from the other digits. The app recomputes it for your articles’ barcodes. If it does not add up, the code is wrong — usually a transposed digit during entry. Such articles are marked „EAN invalid“ and can be listed together via their own filter. Only codes of a usual length are checked (8, 12, 13 or 14 digits); your own internal numbers in the barcode field are left alone, and a missing barcode is not a case here. The check costs nothing, since it involves no save.

💡 An outlier is not an error but a pointer: a product may be tightly calculated for good reason. The app therefore corrects nothing on its own — it only shows and explains.
⚠️ Only loaded products are evaluated. With a small page size the comparison base is narrow and groups fall below the minimum of five products. For a complete check set the load limit to 'All' — loading alone uses no quota.

Status bar

A compact autosave bar sits in the top status row, to the right of the editing counters. It shows the autosave status and allows quick toggling as well as choosing the delay (2 sec / 10 sec / tab switch) directly in the tab.

💾 Backup

Allows export and import of all relevant price data as a JSON file. Before every major change a Full Backup should be created.

Exporting

Four export types are available:

  • Full Backup – cost, selling price and factor for all variants (recommended)
  • Purchase Prices – unit cost only
  • Selling Prices – Shopify prices only
  • Calculation Factors – factors only
💡 The file contains the export type, timestamp and all variant IDs, sorted alphabetically by product title – ready to import directly.

Full Backup is available from the Basic plan. Selective backups (purchase prices, selling prices, factors) require the Premium plan. Restoring requires the Basic plan.

Restoring

  1. Select backup file (JSON)
  2. App compares the file with current Shopify data
  3. All differences are shown in a table
  4. Individual changes can be selected or deselected via checkbox
  5. "OK – Apply changes" writes only the selected values back
⚠ Data must be fully loaded before a backup file can be imported.

Restore is available from the Basic plan. Without an eligible plan, clicking the button shows an upgrade prompt. A restore is not counted against your monthly quota and always completes in full, regardless of how many products are affected.

What the backup covers — and what it does not

The backup contains prices and calculation values, not items. For each variant the file holds the identifier, the SKU, product and variant name and – depending on the export type – cost price, selling price and backup price; for each product the calculation values. Not included are description, images, tags, inventory, options, collections and all other item details.

It follows that a deleted item cannot be restored. Values are written back using the item's Shopify identifier — once it is deleted, that identifier no longer exists. Such entries are listed separately when the file is read, so that no one is left with the impression that everything was restored. If you recreate a deleted item in Shopify, Shopify assigns a new identifier and the old backup no longer matches it.

⚠ If an item is deleted by accident, only Shopify itself can help: deleted products can be recovered there for a while via the trash or via support. This app's backup is no substitute — it protects your pricing work, not your item records.

Backing up settings

Number patterns, supplier profiles and calculation templates belong to the shop, not to a single product — which is why the backups above do not contain them. The Back up settings section at the bottom of the tab puts them into a file of their own. What gets saved is what you set up:

  • Number patterns with their mappings — structure, roles, lookup tables, tags and titles. This is usually the bulk of the work.
  • Supplier profiles — EAN beginnings, sample EAN and the runs stored per supplier.
  • Calculation templates — the per-vendor and per-category presets from the Calculation factors tab.
  1. Tick what should go into the file. Each area states how many entries it holds; an area without entries is greyed out and cannot be picked.
  2. Back up settings downloads a JSON file. Date and time are part of the file name.
  3. To restore, use Read a backup and pick the file. Before anything is written, each area states what would happen: how many entries the file holds, how many of them the shop does not know, how many it knows differently and how many are unchanged.
  4. Deselect the areas you do not want back, then press Restore. Writing happens against the state of that moment — if someone works in a second window at the same time, their work is not lost.
🔁 Restoring adds, it does not replace. Whatever is in the shop stays; the file only wins where the identifier matches — the same pattern, the same supplier name, the same template. Nothing is deleted. So yesterday's backup cannot throw away today's thirty colour mappings; it can, however, turn a single one of them back to its old state.
⚠ Calculation templates are only written back — products are not recalculated by this. If the old factors should take effect as well, apply them again in the Calculation factors tab. And whatever you want to get rid of, you still delete in its own tab: the file only brings along what is in it.

Backing up settings is part of the price list import and works from the Premium plan. The file holds your setup only — no prices, no catalogue data.

⚙ Settings

The Settings & Subscription tab configures global options for the app and provides access to subscription management. Settings apply to all tabs and are stored in your browser (localStorage).

Autosave

Two separate toggles enable autosave for the purchase prices tab and the article calculation tab independently. Below each toggle, choose the delay: 2 s and 10 s start a timer after the last input; 'Tab switch' saves all pending changes when leaving the tab. Toggle and delay are also accessible directly in the status bar of each tab.

🔒 Autosave is available from the Premium plan and is enabled per tab in settings.

Automatic backup

Before save operations, the browser can automatically download a JSON backup file. Configurable separately for purchase prices and article calculation: 'No automatic backup', 'On batch save only', or 'Always'. Default: Always. Switching to 'No automatic backup' shows a warning dialog highlighting the risk.

VAT rates

Sets the standard and reduced VAT rates used in article calculation. The rate is selected per product and applied to gross price calculations.

Price Rounding

Sets which step the calculated selling price is rounded to. Available steps: €1.00 · €0.50 · €0.10 · €0.05 · No rounding.

Rounding is applied in Article Calculation on every save: new price = cost × factor, rounded to the chosen step. A live preview shows the result for each rounding step directly in the selection.

🔒 Price rounding is available from the Premium plan.

Product load limit

The number of products loaded initially is set directly in the filter row of the Purchase Prices and Article Calculation tabs (25 / 50 / 100 / 250 / All). The setting is saved and applies to both tabs.

Language

The app language can be switched to German or English. The setting is stored per shop and applies to all users of the same shop.

Remove PriceCalc Pro

The way out sits at the bottom of the Settings tab. Removing deletes the app from your store: prices, tags and metafields stay in Shopify unchanged, and the app stops accessing them. Shopify ends a running subscription with the uninstall. A confirmation comes before the removal.

Your calculation factors, number patterns and supplier profiles live in metafields this app created — Shopify usually clears such fields away when an app is removed. So create a backup on the Backup tab first, and they are all back in one go after a reinstall.

💳 Subscription

Subscription management is part of the Settings & Subscription tab (below the settings section). It shows your active plan, monthly usage, and all available plans.

Choosing a plan

Use the toggle above the plan cards to switch between monthly and annual billing. The annual rate is cheaper -- the savings percentage is shown directly on each plan card. Click the desired plan to be taken to Shopify's payment page. Your plan is updated automatically after checkout.

Usage & Status

Your current plan, monthly usage, and the next reset date are shown in the status area. A progress bar visualises usage. A warning appears when usage exceeds 80%. Everything written into a product counts: purchase price, article calculation, switching the calculation mode, and every automatic save – individually or via 'Save all'. Settings and calculation factor presets do not count, nor does discarding changes, searching for affected products, or restoring a backup.

Cancellation

Your subscription can be cancelled directly in the app without leaving to Shopify. Click 'Cancel subscription', confirm the dialog -- the cancellation takes effect immediately. You retain access to all features until the end of the current billing period. After that, the app automatically switches to the Free plan.

💡 Your current plan and usage can be found under Subscription in the sidebar.

💬 Feedback & Contact

The tile on the home page opens a page with two separate routes: a form for wishes and hints, and a direct line to support. Both are voluntary, and nobody asks you for a rating here.

Send a wish or a hint

Pick the category – a feature is missing, something is not working, something is cumbersome, kind words or something else – and write your message. Write as often as you like. A reply is not part of it: if you need one, use the route below.

We store your message, the category, your shop address and your plan – no names and no email address. The form is not always there: it only shows up while we are collecting feedback. The route to support stays visible either way.

When we come back to you

If we act on a wish, you hear about it inside the app: a small message bubble appears in the bottom right with two sentences and, where it fits, a button to the relevant place. It blocks nothing and does not expire — it stays until you dismiss it. We use the same corner for short announcements that concern everyone. If several are waiting you still see only one; the next arrives once this one is closed. No discounts, no advertising and no review requests appear there. None of this promises you a reply — if you need one, use the support route.

Reaching support

The button opens your mail app with a prepared subject addressed to support@jrmedia.software – shop address and plan are already in it, so we do not have to ask. We reply within 24 hours on business days.

💡 It helps to say what you were trying to do and what happened instead. For single products an item number helps, for price lists the file name and the vendor.

💡 Tips & Notes

Recommended Workflow

  1. Create a backup (full backup)
  2. Update purchase prices
  3. Check / adjust calculation factors
  4. Open Article Calculation – review cost-changed products
  5. Save new prices

Plans & Action Limits

The app uses an action system. In the Purchase Prices tab, one action equals one click on Save. In the Article Calculation tab, 'Save all' counts one action per saved product.

PlanLimitFeatures
Free20 actions / monthSingle save, unit costs & Shopify prices
Basic150 actions / monthSave all, 5-step calculation, price rounding, full backup & restore
Premium500 actions / monthAutosave, selective backup, Excel export/import
UnlimitedUnlimitedWork sessions

Your current plan and usage can be found under Subscription in the sidebar.


Frequently Asked Questions

Why are some products marked orange?
The cost price has changed since the last calculation. Check the factor and recalculate the price.
What is the saved reference price?
After saving in Article Calculation the calculated price is stored as a metafield (custom.sicherung_preis). This value is used for cost-change detection.
Can I restore only individual variants?
Yes – in the restore view individual rows can be deselected via checkbox.
What happens when I click Cancel in the confirmation dialog?
Nothing is saved; all local changes are retained and can continue to be edited.
What does the Cancel button in the bottom bar do?
It discards all unsaved changes in the current tab and restores the last saved state. Unlike the dialog cancel, this actually resets data. The button is available on all plans and is visible as soon as there are pending changes.

Artikelkalkulation · Independent Shopify App · Not officially by Shopify

© 2026 JRMedia · Janine Fabienne Eicker Home