Appearance
Setting up the shop
Three steps, in this order. Each one needs the one before it.
0. Say which currencies you take (Setup) — only if more than one
1. Name the places stock sits (Setup)
2. Make your products sellable (Catalogue)
3. Issue a checkout lane (Setup) — optional0. Say which currencies you take
Skip this entirely if you take one currency. Most shops do, and everything works without touching it — no currency appears anywhere in the app, on any report, or on any receipt.
Only start here if you genuinely take more than one over the counter.
- Go to Retail → Setup.
- Under Currencies, add the one you want your reports totalled in first. Give it a Code (
USD), a Name (US Dollar) and how many Decimals prices are rounded to — two for most, zero where the smallest note is bigger than a cent would be. - Add the second currency the same way.
- Record a rate for it: pick it under Rate for, type how many of it one of your first currency buys — the figure on the board outside — and click Record rate.
The first currency you add cannot be changed later
The first one becomes the currency every cost, stock value and margin figure is totalled in. Once any stock has moved you cannot change it, because every cost already recorded is a figure in it — changing it would not convert those numbers, it would silently reinterpret them. Add the right one first.
Two ways to price across currencies
You choose, per shop, under Currencies on the setup screen.
Off — prices are set by hand (the default)
Adding a second currency does not give your products a price in it. You set that yourself, per product, on the catalogue — see Changing a price.
A price worked out at this morning's rate comes to 41,237.4193, which is not a price anybody puts on a shelf. Shops round to a note a customer can hand over, and move it when they decide to rather than when the rate moves.
A product you have not priced in the second currency cannot be sold in it. The till says so and refuses, rather than converting.
On — sell in any currency
Tick Sell in any currency and any product can be rung up in any currency you take. Where a product has no price you typed, the till charges its main-currency price converted at the rate in force, rounded up to that currency's step.
- A price you typed always wins. Conversion only fills the gaps.
- Rounding is always up, never to the nearest. A converted price stands in for one you never set, and rounding down would sell below your own price.
- Set a step per currency in the Round to box —
100where the smallest note worth having is a hundred. Leave it blank to use the decimals. It is never applied to a price you typed. - No rate, no sale. A currency with no rate recorded cannot be converted into, and the till refuses rather than guessing.
A converted price moves when the rate moves
That is the trade you are making. The catalogue marks these prices converted so you can see at a glance which figures are your decisions and which are today's arithmetic. Type a price into any of them to fix it.
Pinning a product to the currency it was stocked in
Some stock you pay for in hard currency, and selling it at a converted rate loses money the moment the rate moves. Open the product on the catalogue and tick Only sell this in <currency>.
A pinned product is sold only in the currency its most recent delivery was booked in. It ignores Sell in any currency, and it ignores any price typed in another currency — the pin is the more specific instruction. The catalogue shows pinned in the other currency's column instead of a price.
Every delivery booked on Receiving is booked in your main currency — the one your reports are totalled in — so a pinned product sells only in your main currency, at the Sell price you set for it. The tick names that currency (Only sell this in USD, say); on a product with no delivery booked since you set your currencies up it reads Only sell this in the currency it was stocked in, and that is your main currency too.
Recording rates
The rate is used for one thing: totalling your reports into one currency. It is never used to price anything.
- A sale is stamped with the rate in force at the moment it happened, and keeps it. Recording a new rate today never changes what last week's sales reported.
- A sale in a currency with no rate recorded yet is refused: totalling 1,200,000 at a made-up rate of 1 would book 1,200,000 of revenue, and nothing on any screen would look wrong.
- Recording a rate for a moment already on file corrects that entry rather than adding a second answer for the same moment.
- Every rate records who entered it and when, alongside where you said it came from. A rate decides what every sale in that currency is worth on your margin report, so who set it is part of the figure.
Where Sell in any currency is on, the rate does a second job: it is what an unpriced product's price is worked out from. A sale keeps the rate it was stamped with, so a rate you record tomorrow never changes what a sale reported today.
Stopping a currency
Stop taking withdraws it from the till. Products keep their prices in it, every sale already taken in it stays exactly as it is, and you can Take again later. The currency your reports are totalled in cannot be stopped.
Tax codes
Retail → Setup → Tax codes is where you tell the till which taxes you charge. Leave it empty and nothing is taxed.
Add a code for each tax band:
| Field | What to enter |
|---|---|
| Code | A short code printed beside each line on a receipt, such as VAT or ZERO. Letters, digits, - and _; up to ten. |
| Name | What staff call it, such as Value added tax. |
| Kind | Standard has a rate (VAT at 15%). Zero-rated is taxable at 0% — basic foods in many countries. Exempt is outside the tax altogether. A VAT return reports zero-rated and exempt sales in different boxes, which is why they are two kinds. |
| Rate (%) | Standard codes only. Type 15 for 15%. |
| Shelf prices | Include the tax (the usual for VAT, and the default): the price on the shelf is what the customer pays, and the tax is worked out of it. Tax added at the till: the shelf price is before tax, and the till adds the tax on top. |
| From | The first day the code applies. Sales before it are not taxed under it. |
The first code you add becomes the default. Every product without a code of its own is taxed under the default, so adding VAT 15%, prices include the tax is usually all a shop needs to do. Use Make default to move the default to another code. Then give the exceptions — zero-rated basic foods, say — their own code on the product (see the Tax code field).
Changing a rate
Use New rate on the code and pick the day it starts. Sales already made keep the rate they were taxed at — a rate change never restates a receipt or a past report. A sale queued by a till that was offline is taxed at the rate in force when it was rung up, not when it reached the server.
Changing whether shelf prices include the tax
Each code has its own Shelf prices box — Include the tax or Tax added at the till. Change it there and it applies from that moment to every product taxed under the code. Sales already made keep the tax they were charged, and a sale a till queued while it was offline is checked against the code as it stood when it was rung up.
If Setup says there is no default
Two warnings can appear above the list of codes, each with a New default box and its own Make default button:
- No default tax code: items without a code sell untaxed. Products without a code of their own are not taxed until you choose one.
- The default tax code … has been retired. Products without a code of their own are still taxed under it, but it is not offered anywhere. Choose a current code to take its place.
Pick the code and click Make default. The new default applies from that moment; sales already made keep the tax they were booked at. If no current code is left to choose, add one, or Restore a retired one.
How the tax is worked out
The server works the tax out on every sale; the till only previews it.
- Per line, then added up. Each line's tax is rounded to the currency's smallest coin (half a cent rounds up), and the basket's tax is the sum of its lines, so every line on a receipt agrees with the total under it.
- Prices include the tax: tax = line total × rate ÷ (1 + rate). Two items at 11.50 under VAT 15% come to 23.00, of which 3.00 is tax.
- Tax added at the till: tax = line total × rate, added to what the customer pays.
- Refunds linked to the sale they reverse are refunded under that sale's own code, rate and tax, pro rata, and never for more than the sale took — whatever the till says. A refund of a sale that carried no tax is refunded untaxed, at the price that sale was rung up at. An unlinked refund is taxed at the rate in force when it is rung up.
Removing a code
Remove asks first, and only works for a code added by mistake: once a product uses it or a sale has been taxed under it, it is part of your tax history and stays, so Remove offers to Retire it instead. A retired code is marked Retired: it is not offered for products, and the sales and reports that name it keep it. Restore offers it for products again. The default code can be neither removed nor retired: make another code the default first.
A new code made the default can start on an earlier day, but not earlier than the last time the default changed — that would rewrite which code was the default then. Trackapt says the date to start from instead.
Only members at level 6 can add, change or remove tax codes — the same bar as currencies and exchange rates. Everybody can see them.
1. Name the places stock sits
A location is a place in your shop where stock physically sits. Most shops have at least two: the shop floor and the stockroom. Trackapt keeps a separate stock figure for each one, so you always know not just how many you have but where they are.
You must create at least one location before anything else works
The till cannot open, deliveries cannot be booked, nothing can be counted.
To add one:
- Go to Retail → Setup.
- Under Selling locations, type a name into the box. Use whatever your staff actually call the place.
- Click Add location.
- Repeat for each place. Two locations at minimum if you ever want to move stock between them.
Naming
Pick names that are unambiguous when read on a dropdown at speed. "Shop floor" and "Stockroom" are good. "Store 1" and "Store 2" are not — nobody remembers which is which at four o'clock on a Friday.
Closing a location
Locations are never deleted, because everything that ever happened in them has to stay traceable. Instead, click Close on the row and confirm.
A closed location stops appearing as a choice on the till, receiving and so on, but its history stays intact. Click Reopen to bring it back.
2. Make your products sellable
Now you tell Trackapt which of your existing products can be sold, and for how much. A product here is a Tracked Item that already sits in one of your Tracker Groups; the dialog calls that Tracker Group its category.
A product that has not been through this step cannot be scanned anywhere
Not at the till, not at receiving, not at a stock count.
- Go to Retail → Catalogue.
- Click Make a product sellable (top right).
- Fill the dialog in, top to bottom:
| Field | What to put in it |
|---|---|
| Which category holds it | The category — the Tracker Group — the product already sits in. Selling a product does not move it out of its category, and nothing else about it changes. |
| Find the product | Type part of the product's name. Results appear as you search, a page at a time. Click the one you want. |
| Barcode | Optional. Scan the product's own barcode straight into the box, or type it. Leave it blank for loose goods, bakery, bags and anything else without a printed code — those are sold from a quick key, by name or by SKU. A barcode you do give has to be unique across your whole shop — a scan must land on exactly one product — and the same bars written two ways (a 12-digit UPC-A and its 13-digit EAN-13, say) count as one barcode. |
| SKU | Optional. Your own short code for the product, such as BRD-WHT. Letters, digits, -, _ and . only, no spaces, at most 32 characters. It must be unique in your shop, and capitals do not matter: brd-wht and BRD-WHT are the same SKU. A cashier can type it into the till's scan box or search. A product can have a barcode, a SKU, both or neither. |
| Open price | Tick it for things priced at the counter — a bakery tray, a second-hand book, a market stall's produce. The till then asks the cashier for the price every time the product is rung up. See Open-price products. |
| Sell price | Required, unless Open price is ticked. What the customer pays, tax included — the figure on the shelf edge, not the figure before tax — unless the product's tax code says tax is added at the till. For an open-price product it is labelled Suggested price, is optional, and only pre-fills the till's price pad. |
Sell price (<code>) | Only where the shop takes more than one currency: one box per other currency. Leave one empty and the product is not sold in that currency. See If you take more than one currency. |
Only sell this in <currency> | Only where the shop takes more than one currency. See Pinning a product. |
| Tax code | Once the shop has tax codes, a list of them: leave it on Shop default unless the product is taxed differently (zero-rated basic foods, say). A free-text code a product already carries is kept and marked not set up — the product is taxed under the default until you pick a real code. A shop with no tax codes keeps a free-text box. |
| Shelf life | Optional. Number of days the product lasts. Leave blank for anything that does not go off. |
| Available to sell | Leave ticked. Untick it to delist the product. |
| Deliveries must name a batch | Tick only for products where you need to trace a recall or an expiry back to a specific delivery. Every delivery of the product must then have a batch typed on its line before it can be booked in. |
- Click Make it sellable.
The product now appears in the catalogue list. With a barcode it scans everywhere; with a SKU it can be typed at the till; with neither, give it a quick key or find it by name.
If a barcode or SKU is already taken
Saving is refused and the message names the product that already carries it — Barcode 5012345678900 is already used by Milk in this account, say — so you know which one to open. Fix whichever of the two is wrong.
If two products somehow already share a code, the catalogue says so in a warning at the top — Some codes are shared by more than one product — with each shared barcode or SKU and the products carrying it. It stays until each product has its own code. Codes held only in groups you cannot open are counted rather than named, and someone who can open those groups needs to fix them.
Open-price products
Some things have no shelf price: what one costs is decided at the counter. Tick Open price on such a product.
- At the till, ringing it up — by scan, SKU, search or quick key, and even with the network down — opens a price pad before anything goes on the basket. Type the price and confirm; Cancel adds nothing.
- The basket line is marked open price, and its price can be changed by clicking it. Each one you ring up is its own line, because two trays can be two prices.
- The price is typed in the basket's currency, to that currency's own decimals, and must be more than zero (at most 100,000,000).
- The sale records the typed price, that it was typed, and who rang it up. Totals, refunds, margin and every other report use the typed price.
Hardware checkout lanes cannot sell open-price products
A lane's hardware has no way to ask its cashier for a price, so a lane's sale containing an open-price product is refused with a message saying to ring it up on the in-app Till instead. Lanes can still sell every other product, including ones found by SKU.
Delisting a product
When you stop selling something, do not delete it — untick Available to sell on its profile.
A delisted product can no longer be sold, but customers can still return one, and every movement it ever had stays on record. It can also still be received — if a supplier sends you something you have stopped selling, you can book it in; you just cannot sell it until you make it available again.
Delisted products are hidden from the catalogue until you switch the Delisted toggle on.
Editing a product later
Find it in the catalogue and click the pencil at the end of its row. The dialog reopens, headed How this product sells, with the product already chosen.
Reading the catalogue list
The table shows Product · Barcode · SKU · Price · On hand · Reorder at · At cost — with one Price column per currency where the shop takes more than one. Either code may be blank. An open-price product shows open price in its price column. Two more labels are worth knowing:
| Label | What it means |
|---|---|
| never counted | Nobody has ever counted this product, so the on hand figure is only as good as the movements Trackapt has seen. See your first stock count. |
| not costed | No delivery of this product has ever been booked in, so Trackapt does not know what it cost you. Its value and margin will read as zero. |
| Low stock | Stock across every location is at or below the product's reorder level. See Reorder levels. |
Use Search or scan to find something — by name, barcode or SKU — Stock at to see the figure for one location instead of everywhere, and Previous / Next to page through.
The export bar at the top right takes away the whole catalogue under the search and location you have set — every page of it, not only the one on screen — up to 5,000 products. Past that the screen says so before you press anything, and the export's subtitle says which part it holds. See Taking data away.
Setting up many products from a spreadsheet
Typing barcodes and prices one product at a time is fine for a corner shop and slow for a supermarket. Retail → Catalogue → Import from spreadsheet does a whole category at once:
- Download a template. Choose a category (a Tracker Group) or The whole catalogue (every category that already sells something), and press Download template. Every item in it gets a row: the ones that already sell with their barcode, prices and the rest filled in, the others blank.
- Fill it in in Excel (or anything that saves
.xlsx). Leave the grey first column alone — it tells Trackapt which item each row is. - Upload it with Choose file. The file is read in your browser and every row is checked against the same rules as the single-product dialog. A table shows, row by row, new sellable, updated, unchanged or error, with what would change and, for an error, why.
- Apply. Every new and updated row is saved; rows with errors are left out. Fix them in the file and upload it again — rows that already match come back unchanged, so uploading the same file twice does no harm.
The two rules:
- A blank cell leaves the value as it is. A row you leave blank changes nothing, and an item whose row is blank is not made sellable.
- A single
-clears the value — the barcode, SKU, tax code, shelf life, reorder level or quantity, or a price in another currency. A Yes/No column cannot be cleared, and nor can the sell price of a fixed-price product (mark it Open price first).
Numbers are never guessed. A number Excel already holds as a number is read as it is. A number typed as text is read only when it cannot be misread: 2.50, 1250, or 1,250.50. 2,50 (a decimal comma) and 1,234 (a thousand, or one and a bit?) are refused on that row, saying how to type them — the import will not risk saving a price a hundred times too high.
Size. A file over 5 MB, with more than 10 sheets, or with something typed far past the template's last row or column is refused straight away, naming where the stray value is. Formatting a whole row or column is fine — only typed values count.
| Column | What to type |
|---|---|
| Item id (grey) | Do not change it. |
| Item, Category | For reading only; changing them changes nothing. |
| Barcode | Optional; unique in the shop. |
| SKU | Optional; letters, digits, -, _ and ., unique in the shop (capitals ignored). |
| Sell price / suggested price | What the customer pays, tax included — for an open-price product, only the suggestion the till opens on. Needed to make a fixed-price product sellable. Rounded to the currency's decimals. |
| Sell price (code) | One column per extra currency you take. Typed, never worked out from a rate. |
| Open price | Yes if the till asks for the price each time. |
| Tax code | Optional, up to 20 characters. |
| Shelf life (days) | Optional, whole days. |
| Batch tracked | Yes if every delivery must name its batch. |
| Available to sell | No delists the product. |
| Reorder level | Optional — see Reorder levels. |
| Reorder quantity | Optional — how many to order. |
If two rows give the same barcode or SKU, the first row keeps it and the later one is refused. A barcode already on another product, or a category you are not whitelisted on, is reported on that row; the other rows still go through. Importing needs the same clearance as pricing (level 3). The template also carries a How to fill sheet with these rules.
The preview reads the file in order, exactly as Apply will: if an earlier row moves a barcode or SKU off one product, a later row may give it to another. Each row is all or nothing — a row reported as an error changed nothing. If the connection drops part-way through Apply, the rows already saved are shown as saved, the rest as not confirmed, and uploading the file again finishes the job (rows already saved come back unchanged).
Reorder levels
Give a product a reorder level (and, if you like, a reorder quantity) in its dialog or in the spreadsheet import. Then:
- the catalogue shows the level under Reorder at, with Low stock beside any product whose stock across every location is at or below it;
- Catalogue → Reorder list lists every such product with the reorder quantity as the suggested order, and takes the list away as Excel, PDF, print or a chat share;
- when a sale, write-off, transfer or count takes a product down to its level, everyone cleared to level 3 or above who can see its category is sent one low-stock alert in chat. It does not repeat on every later sale; once the product is restocked above the level, the next drop alerts again. Changing the level resets it and checks the new one straight away: set a level at or above what is already on the shelf and the alert goes out now, not at the next sale.
Levels need not be whole numbers — stock sold by weight is reordered by weight. Pick the product's Stock unit in its dialog (kilograms, boxes…) so the level, the quantity and the reorder list's Unit column say what they count; leave it empty for things counted one by one. Leave both levels blank for anything you do not want watched.
This is the recommended way
A low-stock warning can also come from a balance fed by the retail ledger, with an alert rule on it, but a reorder level on the product is simpler and also drives the catalogue and the reorder list.
Refunds
Under Retail → Setup → Refunds:
- Your supervisor PIN (level 3 and up) — what you type on a cashier's till to approve their refund. Only ever your own. Type it twice and click Set PIN (Change PIN once you have one). A PIN is at least four characters, and not one character repeated —
1111is refused. - Refund without a receipt, at most (set at level 6) — the most one refund with nothing to check it against may give back, in your reporting currency. 0 switches such refunds off, which is how a new shop starts. Click Save limit to keep it.
A supervisor is a team member of this app, or the account holder. Only they can hold a PIN here and approve refunds with it; a member who is not on this app's team is refused with Only a team member of this app can hold a supervisor PIN here. The Supervisor list in the till's Return window offers only team members of this app at level 3 or above who have set a PIN, and the account holder once they have set one. A shared station login is never on it — so set your PIN signed in with your own login, not while checked in at a shared station, where it would be kept against the station's login.
Hardware checkout lanes cannot take refunds; they are taken on the in-app till.
3. Issue a checkout lane
Skip this unless you have physical till hardware
To serve customers from a computer, tablet or phone using the Trackapt Till screen, you need nothing here.
A checkout lane is a set of credentials that lets a piece of till hardware send sales to Trackapt without anybody signing in. Each lane is permanently tied to one location.
A lane can look up a product by its barcode or SKU, read its own quick keys, the currencies the shop takes and whether it may convert into them, and record a sale at its own location — nothing else. It cannot read stock figures, costs, reports or the catalogue, and it cannot take a refund.
- Go to Retail → Setup.
- Under Checkout lanes, type a name.
- Choose Where it sells — the location this checkout stands in. This cannot be changed afterwards.
- Click Issue.
A dialog opens showing a Till ID and a Secret.
Copy the secret now
It is shown once and cannot be read again. There is a copy button beside each field and a Download as a file button that saves both. Hand them to whoever configures the till hardware, then click I have copied the secret.
If a secret is lost or compromised
Click Rotate on that lane's row and confirm. A new secret is issued and the old one stops working immediately — the checkout will need reconfiguring before it can sell again.
Switching a lane off
Click Switch off to stop a lane trading without destroying it, and Switch on to bring it back.
Each row shows when the lane was last seen, which is the quickest way to tell whether a checkout is still talking to Trackapt.
Listing, issuing, rotating and switching lanes needs level 6. Below level 6 the Setup page still opens, and in place of the lanes it says Checkout lanes are issued and managed at level 6. The rest of Setup that is not level 6 — locations, quick keys and your own supervisor PIN — is open from level 3.
Laying out the quick keys
Quick keys are the tiles a cashier taps on the till to ring up things that carry no barcode — loose produce, bakery, a carrier bag. The same grid appears on Stock count.
You do not have to set anything up. Until somebody saves a grid, every till fills its keys with Best sellers: the products sold most in the last 60 days. Lay a grid out when you want the keys to stay where your cashiers expect them.
Under Retail → Setup → Quick keys:
- Choose Grid for: Every lane (default), or one location. A location with its own grid uses it; every other lane uses the one for every lane. The line beside it says whether you are looking at Chosen keys or Best sellers.
- Type part of a product's name, barcode or SKU into Add a product and click it in the list. Only products made sellable in the catalogue can be a key. A grid holds up to 48 keys.
- Arrange the keys under On the grid:
- the box on each key is what the tile says — leave it empty to use the product's name, or type something shorter;
- the colour swatches colour the tile, so it can be found without reading it; press the chosen colour again to remove it;
- the arrows move a key earlier or later on the grid;
- × takes a key off the grid, after asking.
- Click Save quick keys. Tills pick the grid up when they next open, or when the cashier presses the grid's refresh button.
If you like the best sellers as they are, Keep these as the grid saves them, in that order, as the grid, so they stop moving as sales change. Go back to best sellers discards the chosen keys for that grid, after asking, and its tills show the best sellers again.
Saving a grid needs level 3, the same as pricing.
Changing a price
Prices are changed on the product, not on a separate screen:
- Go to Retail → Catalogue.
- Find the product and click the pencil.
- Change Sell price and click Save.
The new price applies from that moment. A basket already open at a till keeps the price it started with, so a change made mid-transaction never moves the total in front of a customer.
If you take more than one currency
Each currency has its own shelf price, set by hand and moved independently. The dialog has a Sell price (<code>) box for each currency the shop takes besides the main one; type the price for that currency into its own box and save.
With Sell in any currency off, a product with no price in a currency cannot be sold in it — see Two ways to price across currencies.
Only your main currency's price reaches the rest of the app
Alert rules that compare against a price, form fields that fill themselves from one, and item facets all read a single number with no currency beside it. Only the price in the currency your reports are totalled in is written there. If those read a second currency's price they would not gain a currency — the number would simply be forty thousand times bigger, and every threshold you have set would fire at once.
The price history
Retail → Price changes is a read-only history. It does not change prices — it reports on them.
- Three figures at the top count how many prices were Put up, how many Brought down, and the Average move.
- The table shows Product · Effective · Was · Now · Change · %. A product's very first price shows "—" in Was.
- Filter by Product — search, scan, or use the camera button — and by From / To dates.
These are shelf prices — what you asked
What customers actually paid is in the Margin report.

