Adriana Garcia standing under the chandelier on the shop floor at Cande Bridal Boutique in Kelowna
Customer story · Cande Bridal Boutique · Kelowna, British Columbia

Cande Bridal Boutique moved off Bridal Web Solutions without guessing at a single record

Twenty years of a working bridal store, reconciled row by row against the old system's own reports before anyone was asked to trust it.

$141,807.75
of receivable we told the owner not to collect, because it was a sign error in her old system and not money any bride owed
Book a fifteen-minute demo on your own data How a migration runs

What happened when Cande Bridal Boutique moved to RingUps?

Cande Bridal Boutique, a single-location store in Kelowna, British Columbia, moved off Bridal Web Solutions onto RingUps. RingUps imported 2,902 brides, 3,820 appointments, 1,391 orders totalling $2,275,597.72, 2,341 payments totalling $2,161,190.44 net of 43 refunds, 625 gown styles and 500 floor units, then reconciled every figure against Bridal Web Solutions' own exports.

The reconciliation is the part worth reading. Bridal Web Solutions is a deep product dating to 2006, with roughly 85 reports across 11 subsystems. It is not thin. It is a system nobody ever finished configuring, whose exports do not agree with each other, and the only way to find that out is to reconcile it against itself.

Verified against production, 4 August 2026

What moved off Bridal Web Solutions

These are migration figures, not current totals. Cande Bridal Boutique has been trading on RingUps since, so its live numbers are larger, and presenting one as the other would be dishonest in both directions.

2,902
bride records, the whole file rather than a sample
3,820
appointments, history included, not just the forward book
1,391
orders, totalling $2,275,597.72
2,341
payments, totalling $2,161,190.44 net of 43 refunds
625
gown styles catalogued, 624 of them matched to a product
427
gown photographs pulled off the vendor's servers and rehosted
500
per-unit floor inventory records
23
suppliers, across 49 divisions

What does a complete migration off Bridal Web Solutions actually contain?

Cande Bridal Boutique migration ledger. Every row verified against the RingUps production database on 4 August 2026.
What movedCountNote
Bride records2,902The whole customer file, not the active brides only.
Appointments3,820Past appointments as well as the forward book, so history survives the move.
Orders1,391$2,275,597.72 in total order value.
Payments2,341$2,161,190.44, net of 43 refunds.
Gown styles625624 matched to a product. The single miss was "Credit", a bookkeeping row rather than a gown.
Gown photographs427Pulled off the vendor's servers and rehosted in the store's own storage. 197 styles had no image in Bridal Web Solutions either.
Floor inventory500Per-unit records, imported 23 July 2026.
Suppliers23Across 49 divisions.
The method

How does a RingUps migration off Bridal Web Solutions run?

Five steps, run over one weekend at Cande Bridal Boutique. Four of the five exist because an export cannot be trusted on arrival.

  1. STEP 01

    Take every export, then capture what none of them carry

    Bridal Web Solutions ships 47 export files, including a per-unit inventory export. What they do not carry is the configuration: contract bodies across 12 templates, email and message template bodies, scheduled message rules, supplier lead times, size charts, booking-builder settings and per-bride notes. Those were transcribed by hand from a live session, because they die with the subscription.

  2. STEP 02

    Load it so it can be taken back out

    Every row is written idempotent on its source reference, so re-running an import cannot duplicate a bride, and every batch carries an id it can be rolled back by. Imports are reversible in one click. That is what makes it safe to run the load before the reconciliation rather than after it.

  3. STEP 03

    Reconcile it against their reports, not against ours

    Each figure was checked back against the source system's own reporting, one export against another. That is the step that found three answers on a single order, an inventory screen disagreeing with an inventory export, and $141,807.75 of reversals reading as charges.

  4. STEP 04

    Rebuild what the export left out

    The sales export carried no tax, so tax was reconstructed on all 1,391 orders. 36 invoices were then corrected against a second Bridal Web Solutions report, which caught a $3,253.05 overstatement before it reached a bookkeeper.

  5. STEP 05

    Skip rather than guess

    228 orders were skipped rather than fabricate a bride to hang them on. 2,759 payments were skipped for carrying no order number. Every one of them sits in a held queue with a reason, where a person can decide, instead of being quietly absorbed into a total.

ringups.com/import/batch/bws-cande

Held for a human decision

Batch reversible
The import review queue as it stood for the Cande Bridal Boutique batch. Nothing in it was resolved by inference.
HeldCountReason
Orders228No bride on the row could be identified. Skipped rather than invented.
Payments2,759No order number on the row, so no invoice to attach the money to.
Sign corrections93Reversal lines across 59 orders reading back as positive charges.
Tax exceptions36Invoices corrected against a second report; $3,253.05 overstated.
Unmatched products1"Credit", a bookkeeping row with no gown behind it.
Every figure in this panel is a real count from the Cande Bridal Boutique import. A held row is not a failure of the migration. It is the migration declining to answer a question the source data could not answer.
The findings

What did reconciling Bridal Web Solutions' own exports against each other find?

Four findings, in the order they surfaced. None of them required access to anything Cande Bridal Boutique did not already own. Every one of them was reproducible from the store's own exports, which is the only reason they can be written down here.

None of this is a claim that Bridal Web Solutions is a shallow product. It is deep, it dates to 2006, and it has around 85 reports. The problem is not missing capability. It is that a system nobody finished configuring will disagree with itself, and nothing inside it is designed to tell you where.

Finding 01

One order. Three different answers.

On order 872, Bridal Web Solutions' SalesTax export, its Payments export and its own underlying line data each give a different answer.

This is not two views of a number rounding differently. It is three sources inside one system that do not agree about a single invoice, and no screen in that system surfaces the disagreement. It was found by exporting all three and comparing them, which is a thing an owner can do this afternoon.

A
SalesTax export
B
Payments export
C
Order line data
Three sources, one invoice, three totals. We are not publishing the three figures, because the point is that the store cannot know which one is right either.
Finding 02

The screen and the export disagree about the same shelf

Category Defaults reports 655 units in stock. The store's own inventory export reports 506. Both are Bridal Web Solutions describing the same rack of gowns on the same day.

A gap of 149 units is not a rounding question at bridal price points. It is the difference between reordering and not.

Two Bridal Web Solutions surfaces, one inventory, on the same date.
SourceUnits in stock
Category Defaults screen655
Inventory export506
Difference149
Finding 03

$141,807.75 of the receivable was a sign error

Bridal Web Solutions records a reversal with both a negative quantity and a negative price. Two negatives multiply back to a positive, so the reversal reads as a charge.

93 lines across 59 orders were stored that way, worth $141,807.75. Roughly 78% of an apparent $384,659.89 receivable turned out to be an artefact of how the old system stores a refund, not money any bride owed.

We found it, we refused to guess at it, and we told the owner not to collect on it. The restraint is the proof point, not the discovery.

The apparent receivable, taken apart
Apparent outstanding$384,659.89
Artefact of wrong-signed reversals$141,807.75
Roughly 78% of the apparent balance, spread over 93 lines and 59 orders.
Finding 04

The tax had to be rebuilt on every single order

The sales export carried no tax at all, on any row. Tax was reconstructed for all 1,391 orders from the line data and the rates in force.

Then a second Bridal Web Solutions report was used as a check, which produced 36 exception invoices and caught a $3,253.05 overstatement. Reconstructing a figure and then testing it against an independent source is the difference between a migration and a file copy.

1,391
orders with tax rebuilt
36
exception invoices raised
$3,253.05
overstatement caught
What we refused to do

A migration is judged by what it declines to invent

Any importer can reach 100% by filling gaps with plausible values. A bride record invented to hold an orphaned order looks exactly like a real one six months later, and it is worse than nothing, because it will be trusted.

Nothing on this page was inferred, averaged or filled in. Where the source could not answer, the row was held with the reason attached.

Records deliberately not imported during the Cande Bridal Boutique migration.
Not importedCountRather than
Orders228fabricate a bride to attach them to
Payments2,759guess which invoice the money belonged to
Receivable$141,807.75invoice a bride for a reversal the old system stored backwards

If you want to test any bridal system, ask an owner to reconcile their current system against itself.

Export the sales report, the tax report and the payments report for one month. Add them up three ways. Whatever you find, you will learn more from that afternoon than from any demo, including ours.

Adriana Garcia on the shop floor at Cande Bridal Boutique, gowns on the rail behind her
"I used to keep the delivery deadlines in my head. Now I trust RingUps more than I trusted myself."
Adriana Garcia
Owner, Cande Bridal Boutique, Kelowna, British Columbia.
Co-founder of RingUps.
The honesty note

Did the data come across clean? No. Here is what had to be fixed afterwards.

The import was not pristine and nobody at RingUps will tell you it was. Three things landed wrong and were corrected in named migrations, which is the only reason we can list them for you now.

Migration 0089

All 1,391 orders arrived with zero tax

The source carried no tax on any row, so every order landed at nil and had to be backfilled from line data and the rates in force. Not a subset. All of them.

Migration 0090

32 of them were still wrong after that

The rebuild was tested against Bridal Web Solutions' own report and 32 orders did not agree. They were corrected in a second migration rather than left to be discovered by a bookkeeper.

Known limit

Every imported order landed as picked_up

Historical orders all carry the same status, so imported status tells you nothing about what stage a gown was at. Real workflow status starts from the day the store opened on RingUps.

The claim is not that the data came across clean. Nobody's does. The claim is that every place it did not is numbered, written down, reversible by batch id, and was found by us rather than by the store's accountant in March.

After the move

What did RingUps actually replace at Cande Bridal Boutique?

Mostly it replaced things that were never software. A spreadsheet opened on Monday mornings. Sticky notes on garment bags. An owner who carried the delivery dates herself and was right almost every time, which is a sentence with a failure mode built into it.

Cande Bridal Boutique, before and after the move to RingUps.
The jobBeforeNow
Delivery deadlinesA spreadsheet checked on Monday, and Adriana's memory in betweenA must-arrive-by date computed backward from the wedding date and attached to the order
The 28-day ruleA rule the owner held in her headThe default buffer in the deadline engine, because it is a rule that survived real bridal seasons
DepositsBooked as income on the day they were takenHeld as a liability on an append-only ledger and recognized when the gown leaves the store
Dye lotsChecked if somebody remembered to checkEnforced at the write path: a purchase order with a dye-lot mismatch is blocked, and the override has to be ticked deliberately
"Where are we with her gown?"Ask the ownerAny staff member reads it off the record
AlterationsSticky notes on garment bags, and four unrelated reports in the old systemOne workroom screen, in rollout now. Bridal Web Solutions had no workroom to migrate
A Cande Bridal Boutique bride photographed in the Okanagan on her wedding day
A Cande bride in the Okanagan. The date her gown had to be in the store was computed backward from this day, and it sat on the order rather than in anyone's memory.

Where to go next

Questions about this migration

The four things owners ask about the Cande migration

What moved from Bridal Web Solutions to RingUps in the Cande Bridal Boutique migration?

2,902 bride records, 3,820 appointments, 1,391 orders totalling $2,275,597.72, and 2,341 payments totalling $2,161,190.44 net of 43 refunds. Alongside them, 625 gown styles, 427 gown photographs rehosted off the vendor's servers, 500 per-unit floor inventory records and 23 suppliers across 49 divisions. 624 of the 625 styles matched to a product; the single miss was a bookkeeping row called Credit.

Was the Bridal Web Solutions data correct when it arrived?

No, and RingUps does not claim it was. All 1,391 orders arrived with zero tax and had it rebuilt, 32 of them were then corrected against Bridal Web Solutions' own report, and every imported order landed with the status picked_up. The competence is not in a clean export. It is in finding each of those problems, writing it down, and leaving the batch reversible.

What did reconciling Bridal Web Solutions' own exports against each other find?

Three different answers to the same question. On order 872 the SalesTax export, the Payments export and the underlying line data each gave a different figure. Category Defaults reported 655 units in stock while the store's own inventory export reported 506. And 93 lines across 59 orders carried both a negative quantity and a negative price, so $141,807.75 of reversals read back as charges. That was roughly 78% of an apparent $384,659.89 receivable, and no bride owed it.

Can a RingUps migration be reversed if something is wrong?

Yes. Every imported row is idempotent on its source reference, so re-running an import cannot duplicate it, and every batch can be rolled back by its batch id. Imports are reversible in one click. Where a record could not be imported honestly it was not imported at all: 228 orders were skipped rather than fabricate a bride, and 2,759 payments were skipped for carrying no order number.

Bring your own export. We will reconcile it in front of you.

Fifteen minutes, your own data, no scripted demo store. If your exports agree with each other, you will find out in the same session, and that is a useful thing to know either way.

Bring these three files
  1. Your sales or invoice export for one month
  2. Your tax report for the same month
  3. Your payments export for the same month

Three files, one month, three totals. That is the whole test, and you can run it without us.