Access is by invitation, using your Oxbridge account. Return to the portal to sign in.
The Offer Builder turns a raw supplier offer into a branded, priced Oxbridge offer sheet — an Excel file plus a matching PNG table image — in a couple of minutes.
Two small tiles sit next to your username. The Outlook tile is your personal email connection — click it once and approve the popup, and the builder can draft and send emails as you without interrupting you mid-offer. The Dropbox tile is a health light for the shared storage — green means everything is saving properly. The corner dot on each tile: green connected · amber needs connecting · red problem (tell Andy).
↻ Start fresh (top of the builder) clears everything for a brand-new offer.
The portal signs you in on its own page (no separate pop-up window), so Chrome and your phone can offer to save and auto-fill your password like any normal website. The first time, you may need to pick the saved login once from your browser’s password list so it’s remembered against the portal — after that it fills in by itself. (On Windows, if a Windows Hello prompt appears, complete it — cancelling it leaves the boxes blank, which is a Windows thing, not the portal.)
Forgotten your password? On the sign-in screen click Forgotten password, type your email and you’ll be sent a reset link. Opening the link brings you back here to set a new password, then you’re straight in. If a link says it has expired, just request a fresh one — older links stop working once a newer one is sent.
Optional. Leave it empty to load the whole offer, or tell it which lines you want in plain English — e.g. “only the Axe lines” or “just the 150ml deodorants, price at 12% margin”. A forwarded email now loads straight into the builder when you press Load; to narrow it, use the instruction box (or the chat edits) once it's in.
You can drop in a supplier's Outlook email (.msg) or saved email (.eml) directly — if it has a spreadsheet attached, the builder reads that attachment straight away rather than the email text, so even big offers load cleanly.
Everything you've loaded shows as a list under the drop area — the offer file plus every product photo, each with its real filename and type (Spreadsheet / PDF / Image). To drop just one wrong file, press the ✕ next to it — the rest stay put, so one bad photo out of ten no longer means starting the upload again. ✕ Clear all input at the bottom wipes the whole lot. Removing the offer file leaves your photos and any typed text alone, and vice versa.
Photos embedded inside a spreadsheet are now pulled out too. If a supplier's XLSX has the product shots sitting on the sheet (not as separate files), they're extracted on load and placed in the Additional images box for you to drop onto the right lines with Move to line — they aren't auto-scattered across the slots, because a sheet rarely tells us which picture belongs to which row. When the same offer is forwarded by email to the builder, those embedded photos are matched to their lines automatically by reading the barcode off each one.
Wrong photo on the wrong line? On a computer, drag one slot onto another to swap the two images — they exchange places and both are kept. Dragging onto an empty slot just moves it there; dragging an Additional image onto a slot that's already filled swaps the old one back into Additional. A photo is only ever deleted when you press its Remove button.
Loose WhatsApp offer (photos + a few figure lines)? When a supplier sends product pack-shots plus bare figure lines like “6x 564cs - 3.80 eur / 8000units” with nothing saying which figures belong to which product, drop the photos in and paste the figure lines into the box, then press Read offer. The builder reads each product off the photos (barcode from the panel that shows it, description from the front), parses the figures, and shows a Match each product to its figures panel — pick each product’s figures from the dropdown (nothing is paired for you) and press Build these lines. The photos come across onto the lines so none are lost; rearrange them by dragging or with Move-to-line. The supplier’s “Ncs” is read as CPP — correct it on the line if it meant something else, and double-check the cost column before building.
Drop product photos in alongside the offer (or paste them — copying a picture in Excel then Ctrl+V works; dragging straight out of Excel doesn't, in any browser). Photos in a dropped .eml email are pulled out automatically. A barcode in the photo's filename matches it to the right line. Reading the pack languages is a deliberate step you control, and it only reads the Back photo slot — European packs show EN on the front but the real language list on the back, so the front is never read. Put the back-of-pack shot in the Back slot, then under that product tap 🌐 Read languages. What it reads appears directly underneath, with a reminder that it can only read what's printed on the photo and a manual check is advised; press Add to offer to drop that text into the line's Languages column (covered by Undo). Nothing is written until you press Add to offer, so you always see and approve the read first. If there's no back photo yet, the line shows a short prompt to add one; if a back photo can't be read, it says so and you can type the languages in. The 🌐 Read all languages from photos button next to Pick images for me does the whole list at once — it reads every line that has a Back photo, shows each result for review, and an Add all to offer button appears so you can commit them in one go (or add them line by line).
Spreadsheets are read instantly in code — barcodes, case sizes, CPP, prices, quantities — so the numbers are never mis-typed. Descriptions are then rewritten into our house style (brand first, English, clean sizes — e.g. “Wilkinson Sword Hydro 3 Skin Protection Razor”). Images and PDFs are read by AI line by line.
Pasted screenshots now come out in our format too. A screenshot (or photo) of a supplier’s table is read line by line and then put through the same brand-first naming pass as everything else — so the descriptions come back consistent and in house style (size before the variant, English, clean sizes), instead of the supplier’s mixed wording where the same range might appear as both Men + Care and Mencare. Every barcode the reader pulls is also sanity-checked: if one isn’t a valid EAN — wrong number of digits, or the check digit doesn’t add up, which is the usual sign a digit was misread off a photo — the read summary flags that exact line so you can re-read or fix it before building.
Two images of the same offer (e.g. a stock list plus pack photos)? Load the first image, then use + Add image to attach the others, and press Read offer. When one of the images is a stock / price table, that table is treated as the master list — one line per row, with its barcodes, case sizes and quantities — and the loose pack-shot photos are matched to those rows to confirm the description and drop on as the product image. A pack shot of a product that’s already a table row is never turned into an extra line, and a long outer/case barcode read off a curved pack never overrides the table’s own consumer barcode for that product.
Awkward supplier layouts are handled too: sheets where the barcode column has no header (so the data sits one column across from the labels), product names sitting on their own row above each line, European number formats (14.112 = 14,112 units, 1,16 = 1.16), and a best-before written into the product name (BBD: 07/2028) now read into the right columns automatically. Always give a read a quick check, but these no longer come out scrambled.
Offer split over two messages? If a supplier sends the sellable list (with available quantities) in one place and the barcodes/descriptions in another, you can give the builder both at once: paste the screenshot/photo in and type or paste the text list into the paste box, then press Read offer. The builder treats your text as the master list (one row per line, quantities taken from it) and looks up each line's barcode and a cleaner description from the photo. It never invents a barcode: any line it can't match is loaded with a blank barcode, and if the photo shows the same barcode on two lines it loads both and flags the clash. After the read you'll see an amber note listing exactly which lines have no barcode and which share one, so you can fill or query just those with the supplier. (If you only want one source, use ✕ Clear offer input to drop the other first.)
The builder carries a set of supplier rules. When a sheet (recognised by its column layout) or a forwarded email (recognised by sender) matches a rule, the loading instruction fills in by itself — for a pasted/dropped sheet you'll see a message like “Recognised supplier Rotterdam stock list” and just press Read offer; a forwarded email applies its rule automatically as it loads.
Whatever the mode, you can overtype any line's sale price in the amber Sale column — that line then keeps your price. Hover a sale price (the Fixed box or any line's Sale cell) to see the margin it gives — gross margin on the sell price, plus the cash per unit and the markup — as long as that line has a supplier cost in.
Pick the deal currency template (EUR, GBP or USD). The other two currencies are calculated live from the FX rates shown — the rates load automatically and can be overtyped. The built Excel keeps these as live formulas off a hidden rate cell, so a customer (or you) can change the rate in Excel and every price updates.
Decimals — prices show 2 decimal places as standard, switchable to 3 for low-value units.
Tickboxes above the table switch extra columns on. They appear on the built offer only when ticked and filled.
The filename is suggested automatically in our standard form — Brand Product Size DD.MM.YYYY — and can be edited. Press Create offer and the builder produces:
If quantity columns are empty the builder asks whether to hide them — each column has its own tickbox in that prompt. INCOTERMS, MOQ and Lead time prefill from the supplier's offer where stated (our lead time = theirs + 1 week) and are always editable.
Confirm a few columns. If the builder meets a heading it isn\u2019t sure about (an unusual word, or something like \u201CManufactured date\u201D which must never be mistaken for best-before), it now stops and asks instead of guessing. A small panel lists those columns with the AI\u2019s best guess pre-selected \u2014 set each one (or mark it \u201CIgnore\u201D) and press Confirm & remember. Your choice is saved for the whole team, keyed to that heading, so you only ever do it once: the next offer with the same column maps silently and correctly.
Never lose a loaded offer. The builder now keeps your in-progress offer safe in the background, so if the page reloads, refreshes or a download navigates away, you\u2019ll see a \u201CRestore it\u201D banner at the top to bring the lines straight back. \u201CStart fresh\u201D clears it. Tip: a long description that\u2019s cut off in its box shows in full if you hover over it.
Finding a past offer. The library now searches your entire Dropbox Offers folder live, not just a saved index \u2014 so every offer that exists is findable, including older ones and files the builder saved itself. Results are de-duplicated (repeat saves and doubled names are merged), and you can page through the full set with Prev/Next. Pasting an offer copied straight from Excel now reads instantly in-code rather than going through the slower AI reader, so large lists won\u2019t time out.
Offers sent in the email body. When a supplier puts the offer as a table in the body of the email (no attached spreadsheet), the builder now reads that table directly in-code \u2014 fast and accurate \u2014 instead of relying on the AI. European prices written with a comma (1,20) are read correctly as 1.20, and a \u201CManufactured date\u201D column is never mistaken for best-before (it asks you to confirm it instead).
Images & column rules. Each product now has five image slots (Front, Back, plus three extra), and there\u2019s an Additional images box below the list (up to five slots) for case/pallet shots that aren\u2019t tied to one product. Photos that come in the email \u2014 attached or pasted \u2014 are now pulled in automatically (duplicates removed, logos ignored). And under Manage column rules you can review, change or forget any column mapping the builder has learned, in case one was set wrongly.
📋 Copy to clipboard (top of the Lines table) copies the offer — the purple table plus the Incoterms / MOQ / Lead-time line, formatted exactly as it appears in the email — to your clipboard, ready to paste into an email you\u2019re already writing. ↶ Undo next to it steps back your last edit to the lines (a wrong price, cost, quantity, language…), Excel-style; press it again to keep going back, and ↷ Redo re-applies anything you've just undone. Undo/redo cover value edits and fill-downs, not images, and reset when you load a different offer. ◫ Hide columns lets you hide columns you don\u2019t need on a given offer \u2014 e.g. CPP or the available quantities \u2014 Excel-style: they disappear from the builder and from the finished offer (Excel, clip and email), and the button shows how many are hidden. Untick to bring them back; the data is only hidden, never lost.
Per-unit / per-case cost. When a supplier lists prices per case, the builder divides by the case size to get the unit cost and shows a check above the Lines table. If you pick the wrong one (or change your mind later), there's now a small Switch to per unit / per case control that stays put above the table — flip it any time and every line's cost recalculates instantly. No more scrapping the offer and starting again; it's also covered by Undo.
⚑ Report issue (top-right of the Lines table) — if an offer imports wrongly, tap it, tick what came through incorrectly (descriptions, languages, CPP, quantities…), add a line of detail if useful, then either Email the developer (one click — goes straight to Andy) or Share it (on a phone, pick the Claude app in the share sheet). The bundle includes the supplier data exactly as it arrived, how the builder read it, how the offer was uploaded, and any hidden page errors. Nothing is sent until you press a button.
Start fresh wipes the screen for a new offer. Its confirmation now shows, with green ticks, whether this offer has been uploaded to Dropbox and/or downloaded to your computer, so you can see at a glance that nothing unsaved is about to be lost.
The email window drafts in your own Outlook (first tile click connects it). It supports To / CC / BCC each with address-book type-ahead \u2014 it now searches all your Outlook contact folders (not just the default one), the people you email most, and the company directory (the first time, click the Outlook tile to grant the contacts permission). It also has an Insert first name(s) button that greets every recipient by name, and a subject line built from the product and its three-currency price. Tick what to attach \u2014 the Excel is pre-ticked, images optional \u2014 then Send, or save as an Outlook draft to finish later. Your signature is added automatically.
Share Clip to WhatsApp works in two presses, so the options don’t crowd you before you’ve picked a path. Press it once and the tick boxes come to life with the offer clip already ticked; tick product photos too if you want them. Press Share Clip to WhatsApp a second time to open WhatsApp with what you ticked — the offer clip and any photos go together in one batch.
Share Excel to WhatsApp handles the spreadsheet. Phones and browsers won’t always let a web page attach an .xlsx to a WhatsApp chat (most desktop browsers allow images but block spreadsheets), so the button is clever about it: if your device does allow it, the Excel is attached as a file; otherwise it saves the offer to Dropbox and opens WhatsApp pre-filled with a link to it — you just pick the chat and send, and your customer taps the link to download the real Excel. Either way it’s one tap, no hunting for the file. On a computer you can also drag the green Excel tile straight into the WhatsApp Desktop app (no download), or use Download and attach it by hand.
Clicking Create now also saves the offer to the library straight away \u2014 so even a custom one-off you build but don\u2019t upload is kept and can be reopened later from Find a previous offer. The Upload to Dropbox tickbox (off by default) additionally files the finished Excel into the shared offers folder for the team. If you reopened a past offer and edited it, uploading asks whether to update the original file (keeps its date, overwrites in place) or save a new file dated today \u2014 with an option to remove the old one so you don\u2019t end up with two. (A same-day re-save just overwrites, as before.)
Recently built lists the team's last 25 offers, 5 at a time, each showing who built it and exactly when. Open one for: Preview sales offer (what we sent), Preview supplier offer (the original that came in), Download sales offer (the built Excel), Download supplier offer (the supplier's original, to your computer), or Load to builder (reopen it, fully editable — prices, pricing mode, FX and product photos all restore).
Offer library searches every saved offer by brand, barcode, pack size or description — results page 5 at a time. Reload any past offer for a repeat deal — photos included — and on every reopen the descriptions are re-checked against the house naming rule, so even old offers come back in our format and stay that way when resaved.
Use the Traded offers / Stock list / All toggle under the search box to choose what you're searching. It defaults to Traded offers, which leaves out the 001.Stock folder so stock lists don't clutter an offer search; switch to Stock list to search only those, or All for everything. (Files in the 001.Stock folder are tagged automatically when the import runs.)
It then opens full-screen with the purple Oxbridge icon, like a native app.