Skip to main content
Exepad
A laptop on a modern office desk displaying a detailed spreadsheet under soft natural light

How to turn an Excel spreadsheet into an app

Exepad Team · · 10 min read

To turn an Excel spreadsheet into an app, work in five steps. Audit the workbook. Map each sheet to a kind of record and each column to a field. Rewrite the formulas as rules you can check. Put those decisions into a short brief. Then test the first version against the original file before anyone relies on it.

A workbook often mixes raw records, calculations and presentation on the same tabs. An app keeps them apart: records live in a database, calculations become rules, and the layout becomes screens. Most of the work is deciding which part of your file plays which role.

The sample workbook in this guide

Every name, row and amount in this example is sample data invented for this guide. Northwind Cleaning, a made-up company in San Diego, California, keeps its work in northwind-jobs.xlsx. The Clients tab lists each client with an ID, an address and an unpaid total. Jobs has one row per visit. Cleaners lists the three staff. Summary holds a pivot table of hours per cleaner.

Three rows from the Jobs tab:

Job ID Date Client ID Client Cleaner Hours Rate Amount Paid
J-1041 3/2/2026 C-007 Emma Clarke Maria Lopez 3 $40 $120 No
J-1043 03-04-26 C-007 Emma Clarke maria lopez 2.5 $40 $100 No
J-1044 3/5/2026 C-019 Patel Family Dental Aiko Tanaka $50 No

J-1043 has a date typed as text, a client name typed over the lookup with a trailing space, and the cleaner's name in lower case. J-1044 has no hours yet. Rows shaded yellow mean "invoice sent", and no column records that.

Step 1: Audit the workbook

Save an untouched copy first, because step 5 compares the app against it. Then check each tab for:

  • A stable ID for every record. Names change. Client ID ties a job to a client, so it needs no gaps or repeats.
  • One header row per table, with no title rows above it and no merged header cells.
  • One kind of value per column. "Call after 5" in a Phone column belongs in a notes field.
  • Real dates. J-1043's 03-04-26 could mean March 4 or April 3. Decide, then fix it.
  • Duplicates and stray spaces. To a program, "Emma Clarke " with a trailing space is a second client.
  • Color used as data, like the yellow rows.
  • Hidden rows, active filters and subtotal rows, plus formulas that pull from another workbook.

Fix what you can in a working copy, and note each judgment call, such as which of two addresses is current.

Step 2: Map sheets to records and columns to fields

Clients, Jobs and Cleaners each hold one kind of record, so each becomes a list in the app. Summary has no records of its own. It becomes a view calculated from the jobs.

Where two tabs repeat a fact, pick one owner. Jobs copies each client's name with a lookup, but names and addresses are maintained on Clients. In the app, a job links to its client instead of holding a copy.

Then write a column-mapping plan for each record type. Here is the one for Jobs:

Jobs column In the app Decision
Job ID Unique job number Refuse duplicates
Date Date field Fix text dates before upload
Client ID and Client Link to a client The name comes through the link
Cleaner Link to a cleaner Match "maria lopez" to Maria Lopez first
Hours Number Blank until the job is done
Rate Amount in USD Decide whether it belongs to the client or the job
Amount Calculated A rule, not a typed value
Paid and yellow shading One status field Scheduled, Done, Invoiced or Paid
Notes Dated notes One entry per note, with its author

Plan Clients and Cleaners the same way, and mark the fields that decide access, such as each job's cleaner.

Laptop showing a dashboard with charts and lists, beside a CRM logo and sticky notes

Stock illustration, not an Exepad screen. In Northwind's plan, charts and totals like these are views calculated from the job records.

Step 3: Turn formulas into rules you can check

Don't assume a formula carries over as a formula. Describe what each one should produce, then check the result against numbers you already know.

  • The lookup. =VLOOKUP(C2, Clients!A:B, 2, FALSE) fetches each job's client name. In the app, it becomes the link from job to client. Check that J-1041 and J-1043 both open Emma Clarke's record, typed-over name or not.
  • The unpaid total. On the Clients tab, =SUMIFS(Jobs!H:H, Jobs!C:C, A2, Jobs!I:I, "No") becomes a rule: the sum of amounts on a client's jobs that are not Paid. Emma Clarke owes $220 in the sample file, so the app must show $220. The workbook gets this right only because it matches on Client ID, not on the name with the trailing space.
  • The status. =IF(I2="Yes","Paid",IF(F2="","Scheduled","Done")) cannot see the yellow shading, so "Invoiced" never appears. In the app, status is one field with four values. Decide which ones a person sets, such as Done, and which follow from other fields. Check one sample job in each state.

Step 4: Write the brief

Turn your decisions into a brief that a stranger to the workbook could check the app against. Northwind's sample:

A job tracker for a cleaning company with clients, jobs and cleaners. Each job links to one client and one cleaner. Amount is hours times rate. Status is Scheduled, Done, Invoiced or Paid. A client's unpaid total is the sum of amounts on their jobs that are not Paid.

The office manager sees and edits everything. Each cleaner signs in and sees only their own jobs, with each client's address and notes. Cleaners can mark a job Done and add a note, but cannot see rates or totals. Show hours per cleaner per month as a view, and do not import the Summary tab.

Upload the workbook and paste the brief on the Excel to App page, which passes both into Studio. Create the first version there, then refine it. Review it against your mapping plan, including any structure the building assistant in Studio suggests.

This app saves records and signs cleaners in, so it is an app with data: any plan builds and previews it, and putting it live needs a paid plan. Compare the plans before you start.

Step 5: Test the app against the spreadsheet

Run this script on the first version and again after every change. Each expected answer comes from your untouched copy.

Check How to run it Passes when
Counts Compare rows per tab with records per list All 18 sample clients, 64 jobs and 3 cleaners arrive, with no subtotal rows
Known total Open Emma Clarke Her unpaid total reads $220
Cleaned values Open J-1043 It shows your chosen date and Maria Lopez
Saving Add a job, reload, then sign out and back in The job is still there
Missing value Open J-1044 The amount is blank or flagged, not $0
Repeat import Describe how a repeat import treats existing records, then upload the file again Nothing appears twice
Second account As Aiko Tanaka, open a direct link to one of Maria Lopez's jobs It does not open, and no rates show
Signed out Open the app in a private browser window No client names or addresses appear
Phone Mark a job Done in a phone's browser The office sees Done after reloading

Fix one problem at a time, then rerun every check. An access change can break the phone check, and a status change can break the totals.

Three phones showing dark dashboard screens with orange bar charts

Stock illustration, not an Exepad screen. Published apps open in a browser, including on phones.

After the first version: what changes

The upload was a snapshot, so editing the workbook next week will not change the app. Pick one place of record and tell everyone:

  • The app, with the workbook kept as an archive.
  • The workbook, for now, with a deliberate re-import on a set day that uses the matching rule you tested.

With the second option, retire the workbook once the app has matched it through a full billing cycle.

Once Northwind's office works from the app, four capabilities come into play. Test each one before you rely on it:

  • Editors. Give the office manager an editor's sign-in in the published app, with access to clients and visits. Cleaners sign in too, with the narrower access the brief describes.
  • Email. Apps can send email, such as a visit confirmation to a client or a new-job notice to a cleaner. Send test messages to yourself before relying on them.
  • Export. You can export your app's data and code, for example to keep your own copy of the jobs. Check what the export contains before you rely on it.
  • Versions. If a change goes wrong, use the versions available in Studio, inspect the restoration and publish after review. A restore does not undo record changes or emails already sent.

When to keep the spreadsheet

Keep Excel for personal models, one-off analysis and what-if scenarios that nobody else depends on. For a list only you edit, making Excel look like an application with form controls and locked cells can be enough. An app earns its place when several people change the same records, need different views of them, or must not see each other's data.

When your mapping plan and brief are ready, start from your Excel file.

More from Build guides