Bit & GrainBit & Grain
Back to blog
From Spreadsheet to System: Day 3, The AI Import
8 min read

From Spreadsheet to System: Day 3, The AI Import

Brandon Carroll

Brandon Carroll

Founder, Bit & Grain

Guest post by Jake Torres, owner of Torres Trim & Finish in Portland, Oregon. Jake switched from Jobber + QuickBooks to Bit & Grain in early 2026. This is his story.


Day 3 was the first time I did anything in Bit & Grain other than browse. I uploaded my client CSV, watched Grain AI map the fields, and created my first real job in the system.

Here is what the import actually looked like.

Uploading the Client CSV

The migration and import interface is in the Admin section under Data Import. You upload a CSV, and Grain AI analyzes the column headers and maps them to the Bit & Grain client record fields.

My CSV had columns from the Jobber export: First Name, Last Name, Email, Mobile Phone, Home Phone, Business Name, Billing Address 1, Billing Address 2, City, State, Zip Code.

Grain AI mapped all of these automatically and correctly. First Name to first_name, Last Name to last_name, Email to email, the phone columns to their respective fields, and the address components to the address fields. Business Name was mapped to company_name, which is correct.

The one field it could not map automatically was a custom column I had in my CSV called "Notes" that contained things like "prefers morning appointments" or "gate code: 1234". It flagged this as an unmapped column and asked me what to do with it. I chose to map it to the client Notes field, which put all my custom notes directly on the client record.

What Grain AI Flagged During Import

Before completing the import, Grain AI ran a validation pass and flagged three things:

Potential duplicate clients. It identified 12 records that had the same mobile phone number or the same email address. I had already cleaned the obvious duplicates from my CSV, but these were subtler cases where the same client had a slightly different name spelling on two records. Grain AI showed me the pairs side by side and let me choose which to keep or merge. I merged 9 of the 12 and kept the rest as separate records because the clients were genuinely different people.

Missing required fields. 23 records were missing both email and phone. Grain AI flagged these as incomplete and asked whether to import anyway or skip them. I chose to import anyway, since some of my older clients only have a mailing address on file and I wanted those records available.

Formatting inconsistencies. A few addresses had issues like missing zip codes or state abbreviations that did not match a standard format. Grain AI flagged these but did not block the import, just noted them for follow-up.

After resolving the duplicate flags and making the import decisions, the actual import took about 45 seconds for 847 clients.

Creating the First Real Job

After the import, I created the first real job in Bit & Grain: a built-in bookcase project for a client I had been working with for three years. I found the client in the newly imported records, opened their profile, and created a new job from there.

The job creation flow is: name the job, add a description, set the scheduled dates, add any crew members, add a job address (defaulted to the client's billing address), and optionally add an estimate or materials right away.

I added the job name, dates, and a brief description. Then I created a quick estimate with four line items that matched what I had already quoted the client. The estimate was generated from the job and sent to the client portal link in about five minutes.

The client got an email with the portal link. She clicked through, reviewed the estimate, and approved it within the hour. I had not set up the invoicing side yet, but the estimate-to-approval workflow was exactly what I had been trying to get with my old setup.

What Surprised Me About Grain AI During Import

I expected the import tool to be a standard CSV mapper. What I did not expect was the field mapping intelligence. When I had a column called "Mobile Phone" rather than "phone" or "mobile", it understood the intent and mapped it correctly. When it hit the "Notes" column it had never seen before, it did not crash or silently drop the data. It surfaced the unmapped field and asked for a decision.

The duplicate detection was also better than I expected. It was not just exact-match on name. It was looking at multiple fields (email, phone, address) to identify records that were likely the same person even when the name was spelled differently.

I had used CSV import tools before that were purely mechanical. This was different.

The Receipt Test

After the import, I tested Grain AI's receipt scanning on a real receipt from a supply house run earlier in the week. I took a photo with my phone, uploaded it through the app.

Grain AI identified: the vendor name, the date, the total amount ($287.44), and the top-level category (building materials). It asked me which job to apply it to and offered a list of my active jobs. I selected the new bookcase job.

The receipt was logged to the job. The job P&L updated. I did not have to type anything.

That was the moment I started thinking the migration was actually going to work.

What Is Still Ahead

After Day 3, I had:

  • 847 clients imported and validated
  • 1 active job created and estimate approved
  • Receipt scanning tested and working

Still ahead: re-creating my other 26 active jobs, running my first full week on the system, and figuring out the accounting handoff (Bit & Grain handles job P&L; I still need to handle taxes and payroll separately).

Day 4 covers the first full week of running the business on Bit & Grain.

First Week Goals After Import

After Day 3, I set specific targets for the first week that would tell me whether the migration was working:

Target 1: Send 3 estimates through the portal. This would test the estimate workflow end-to-end and show me whether clients could actually navigate the portal.

Target 2: Log 5 receipts via Grain AI. This would test whether the receipt scanning worked consistently on real job site receipts (often wrinkled, poor lighting, multiple items).

Target 3: Get at least 1 invoice paid through the portal. This was the financial proof-of-concept: does the payment flow actually work?

Target 4: Log labor hours for at least 3 jobs. This would test whether the time tracking was fast enough to actually use consistently.

Setting these targets before the week started gave me a way to evaluate the week honestly rather than just deciding by feel.

What the Admin Interface Looks Like

For anyone doing the same migration, here is a practical note on the import interface. The migration and import tools have two modes: guided import (with field mapping assistance from Grain AI) and advanced import (where you manually specify column mappings).

I used the guided import for the client CSV. For the handful of active jobs I imported from a CSV, I used manual re-entry rather than the import tool because the job data was too nuanced to survive a CSV mapping cleanly.

The guided import is the right choice for client records. It is fast, the field mapping is accurate, and the duplicate detection is useful. For job data with complex states, re-entry by hand is more reliable.

The Grain AI Conversation Interface

One thing I had not expected: Grain AI is conversational, not just a file scanner. After the import, when I had the job open and wanted to add the receipt I had from the supply run, I could describe what the receipt was for in plain language and Grain AI would figure out how to log it.

For example: "I have a receipt from Anderson Lumber for $287, white oak flooring for the Hernandez living room job." Grain AI understood "Hernandez living room job" as a job reference, pulled up the matching job, created a material entry, and attached the receipt. I did not have to navigate through the job record manually.

This conversational mode is useful on job sites when you're wearing gloves or your hands are dirty and you can't easily navigate a form. The Grain AI interface works through the chat panel that is accessible from any screen in the app.

I used this mode for about half of my receipt entries during the first week. The other half I handled through the standard receipt photo upload. Both methods work. The conversational mode is faster when you already have context in your head; the photo upload is better when you want the AI to extract the details from the actual receipt rather than you describing them.

Validating the AI Mapping Before Full Import

After the initial import of 847 clients, I did a spot-check of 20 records at random to verify the field mapping was accurate. I picked records with unusual names, records with both business and personal contact info, and records I knew personally (so I could verify the data against my own memory).

All 20 checked records were accurate. The field mapping had handled the name format (first name, last name) correctly even for records where the CSV had entries like "Lopez-Garcia, Maria" (the hyphenated last name was preserved correctly). Business names were correctly placed in the company_name field, not confused with personal names.

The one type of error I expected to find (phone number format issues, since different entries in my Jobber database had inconsistent formatting like "(503) 555-1234" vs. "503-555-1234" vs. "5035551234") was handled correctly. All phone numbers were stored in a normalized format regardless of how they appeared in the source CSV.

This spot-check took about 20 minutes and gave me enough confidence to proceed with the active job setup. If I had found errors in the sample, I would have gone back to review the field mapping before creating any real records in the new system.

The practical lesson: always spot-check a sample of imported records before building on top of the import. A 5% sample (about 40 records for my 847-client import) is enough to catch systematic errors. Individual data quality issues are less important than pattern errors (a field that mapped wrong would show up in the sample).

Share this post

Run your trade business from one place.

Join contractors, electricians, plumbers, and carpenters who use Bit & Grain to manage their entire business.