Your customer’s data, migrated by an agent you can watch

Vern reads whatever your customer can export — spreadsheets, CSVs, a zip of PDFs, a legacy API — drafts an import plan in plain English, stops to ask when something is genuinely ambiguous, and writes validated records into your product.

  • ISO 27001 certified
  • US & AU data residency
  • Audit-ready logs
app.vern.so/companies/brightside-strata/workbook/import

4 source files

Preparing your import…
PreviewOwners
First nameLast nameLevies owing
Waiting for the first preview rows

Import Brightside Strata off PropertyIQ into our schema. Reading your uploaded files Extracting tables from your file Profiling your source data Checking the target templates Owner names arrive as one `SURNAME, Given` column but the Owners template splits first and last. Lot references are zero-padded in one file and not the other. Searching the web about this source Saving what we learned about this source Drafting the import Testing the recipe on your data Reviewing the preview output Asking you a question Map `settled` → Paid `settled` now maps to **Paid**. I’ve saved that against PropertyIQ so every future migration off this source gets it right without asking. Importing your data Checking which fields came across **Unmapped or unavailable data:** nothing — everything mapped cleanly.

A real migration, replayed in the product’s own interface. The question the agent asks is live — pick an answer and watch the import change.

Onboarding teams at startups and publicly listed companies run their customer migrations on Vern

  • MYBOS
  • Urbanise
  • MovePro
  • PetBooqz

The problem

Customer data migrations stall in the messy middle

Getting the export is easy. Getting it correct — every record accounted for, every edge case decided by someone who actually knows the answer — is where onboarding timelines go to die.

01

The back-and-forth never ends

Every ambiguous field becomes an email. Your implementation manager waits days for an answer that turns out to be one sentence long, and the customer waits with them.

02

The data is worse than the demo suggested

Missing fields, three spellings of the same company, relationships that only exist implicitly in a filename. None of it appears until you try to load it.

03

Engineering becomes the bottleneck

Every new source system is a multi-week ticket. The backlog of "just add support for X" grows faster than anyone can drain it, and the migration tool starts gating product velocity.

How it works

Four surfaces, one job: your customer's data, correct, in your product

Vern is not a mapping wizard with an AI button bolted on. It is an agent that does the migration, and four places for you to check its work.

Step one

Connect the source, or let the customer upload it

Connect a source system once and reuse it for every customer on it. Or take whatever they can actually produce — Excel, CSV, a SQL dump, a zip of 312 PDFs — and send them a link so they upload it themselves.

  • 502 source systems in the catalogue
  • Credentials go to a vault, never into the agent transcript
  • No connector? The agent reads the API docs and writes one
Sources
  • 100msCommunication
  • 7shiftsHR & Payroll
  • ActiveCampaignMarketing
  • Acuity SchedulingProductivity
  • Adobe Commerce (Magento)E-commerce
  • AgileCRMCRM
  • AhaProject Management
Or upload their export
Or send them an upload link

Step two

The agent writes a plan you can actually read

It profiles the source, checks it against your templates, researches the source system on the web when the blocker is knowledge rather than data — then drafts a plain-English plan, tests it on a sample, and shows you the rows it would produce.

  • Every plan states what did not come across, and why
  • It asks rather than guesses — one pause, every open question batched
  • The plan is a reusable recipe, not a one-off script
Review plan

Owners — 1,204 rows

Split SURNAME, Given into first and last name. Trim the zero-padding off lot references so they match lots.csv. Levies come across as decimals, not the source’s cent integers.

Lots — 486 rows

One row per lot. Building and plan number are carried from the sheet header rather than repeated per row in the source.

Invoices — 38,918 rows

Unzipped from invoices_2019-2024.zip and joined to lots on lot reference. Status normalised to your enum.

Unmapped or unavailable data

Nothing — everything mapped cleanly. Every plan ends with this section, and it only says “nothing” when it’s true.

ApproveDescribe a change…

Step three

Nothing is written until you approve the diff

Ask for changes in the workbook the same way — "dedupe these owners", "split this column", "why is this lot missing?" — and the agent answers with a row-level diff. The approval card is the gate; it never writes directly.

  • Cell-level validation with plain-English reasons
  • Full version history: who changed what, before and after
  • Trace any imported value back to the cell it came from
Proposed edit

Normalise phone numbers to E.164 and fix the two company-name variants

3 columns · 40,196 cells affected

  • Phone1,182 rows
    (02) 9 555 0114+61 2 9555 0114
  • Company96 rows
    Brightside Strata Pty. LtdBrightside Strata Pty Ltd
  • Settled on38,918 rows
    31/07/242024-07-31
Apply to workbookDiscard

Step four

Land it in your product

Export a CSV, push a webhook shaped the way your API expects, or let a writer agent map every template onto your endpoints and confirm the records actually landed.

  • Flat or relationship-nested payloads
  • Writers verify each write by reading the record back
  • Reuse the same writer for every customer on that destination
Export

Flat by table, or nested by relationship

Nested mode reads the link rules on your templates and embeds each child inside its parent, so you receive whole records instead of tables to re-join.

{
  "lot": "12B",
  "owner": {
    "first_name": "Tomás",
    "last_name": "Ferreira",
    "email": "t.ferreira@brightside.example"
  },
  "invoices": [
    {
      "number": "INV-20412",
      "amount": 780.00,
      "status": "Paid"
    },
    {
      "number": "INV-20489",
      "amount": 780.00,
      "status": "Overdue"
    }
  ]
}

It compounds

Migration #50 takes a fraction of the time migration #1 did

Most migration tooling solves each customer in isolation, and the knowledge ends up in an implementation manager's head or in a script that drifts. Vern writes what it learns down, at two levels, and reads it before every run.

Per source system

What Vern knows about this source

  • How this software structures its exports — field formats, enums, ID and date patterns.
  • These rules apply to every customer you migrate off this source, so you teach them once.
  • Vern applies them automatically, so each new import starts from what you already know.

PropertyIQ writes settled for invoices closed before 2022 — map to Paid.

Per customer

Teach Vern about this customer

  • Capture data quirks and knowledge specific to this customer — reused on every import.
  • Record decisions you made together (what to include, skip, or rename) so they’re not repeated.
  • Vern writes here too, building memory as it learns from each migration.

Brightside’s lot 13 doesn’t exist. Blank levies mean nil, not unknown.

Migration API

Or run the whole thing from inside your own onboarding flow

Everything the app does is available over an API keyed to your organisation. Create a migration, upload the files, let the agent build a plan, approve it, stream the thread into your own UI, and pull the result out — without your customer ever seeing Vern.

app.vern.so/api/v1
API=https://app.vern.so/api/v1
KEY="x-api-key: $VERN_API_KEY"
JSON="Content-Type: application/json"

# 1 — create the migration
ID=$(curl -sX POST $API/migrations \
  -H "$KEY" -H "$JSON" \
  -d '{"name":"Brightside","source":"PropertyIQ"}' \
  | jq -r .migration.id)

# 2 — the agent drafts a plan, stopping at a preview
curl -X POST $API/migrations/$ID/runs \
  -H "$KEY" -H "$JSON" -d '{"kind":"generate"}'

# 3 — see exactly what it would produce
curl $API/migrations/$ID/preview -H "$KEY"

# 4 — approve, and write the rows
curl -X POST $API/migrations/$ID/runs \
  -H "$KEY" -H "$JSON" -d '{"kind":"execute"}'

Trust

Built for the security review, not just the demo

You are handing us your customers' data. Everything below is a product feature you can inspect, not a promise in a slide.

ISO 27001 certified

An information security program certified to ISO 27001, with enterprise-grade encryption and access controls. GDPR compliance is in progress; we handle personal information under the Australian Privacy Act and its Privacy Principles.

Every decision is on the record

Each clarification, mapping choice and automated fix is logged with a before and after, attributed to a person or the agent. Version history in the workbook goes back to the original upload.

Data residency you choose

Tenants are pinned to a region — United States or Australia — and every database, cache, and compute call for that tenant is scoped to it. Nothing crosses regions.

Retention you set

Workbooks auto-delete on your schedule — 7, 30, 90, 180 or 365 days, or never — with a preview of exactly what each setting would remove before you commit to it.

We do not use your Customer Data to train foundation models or any general-purpose AI models.

10M+

Records supported per migration

100M

Records imported since inception

100%

Customer clarifications actioned

Pricing

Pricing that scales with migration volume

Usage is metered in credits — how many a migration consumes depends on the volume of data and the extraction method. No per-user fees.

Pay as you go
For teams launching self-serve onboarding with monthly migration credits.
$0.02 per credit
5K credits included
Migration API
Reusable templates
500+ API extractors
Up to 5 seats
Most Popular
Scale
For growing platforms that need higher credit limits and faster throughput.
$749/month
50K credits included
Everything in PAYG
Priority processing
Audit logs
Migration support
Enterprise
For enterprise platforms with committed usage, residency, and security needs.
Custom pricing
Dedicated FDE support
Volume discounts
Custom data residency
Security reviews
Bespoke integrations

Partnerships

Custom

For companies that don’t treat migrations as core business and hand them to us end to end.

  • Fully managed migrations
  • White-label delivery
  • A dedicated migration team
  • Per-project pricing
  • Priority turnaround SLAs
Partner with us

Need more? Add pay-as-you-go volume at any time, or talk to us about a committed onboarding program.

FAQs

The questions that come up on every call

Ready to migrate your next customer?

See Vern turn a real export — whatever shape it arrives in — into validated, customer-approved records in your product.