The Scenario
You run an online course platform and your payment processor just flagged that you need to issue formal tax receipts to every student by year-end. You have 300 students in a Google Sheet — column A is first name, column B is last name, column C is email, column D is ISO country code. Before you can generate any receipts, every student needs to exist as a Quaderno contact. You have four days.
The bad version:
- Open Quaderno, click New Contact, fill in first name, last name, email, country, click Save, copy the returned contact ID, switch to the sheet, paste it into column E
- Repeat 299 more times across a three-day stretch, hoping you don't accidentally duplicate a contact because you lost track of which rows you'd already processed
- Discover on day three that 40 rows were missing the country code field, so Quaderno either rejected them silently or created contacts without a jurisdiction, which will cause problems when the receipts generate
The receipt deadline is real. Quaderno won't issue compliant receipts against a transaction without a valid contact attached to it. You cannot skip this step.
The Easy Way: One Prompt in SheetXAI
SheetXAI is an AI agent inside your Google Sheet that reads your student data and creates the Quaderno contacts for you.
Create a Quaderno contact for each row in the Students tab — column A is first name, B is last name, C is email, D is ISO country code — write the new contact ID to column E
What You Get
- One Quaderno contact is created per row using the name, email, and country from each row
- The returned contact ID writes to column E as each contact completes
- Rows where the country code is missing or unrecognized are flagged in column F so you can correct and re-run just those rows
- Duplicate emails are detected by Quaderno and the existing contact ID is returned rather than creating a duplicate
What If the Data Is Not Quite Ready
Some rows have a company name instead of first/last name — they are business customers
For each row in the Students tab where column A contains the word Ltd, GmbH, Inc, or SRL, create a Quaderno contact as a company using column A as the company name, column C as email, column D as country — for all other rows, use first name from A, last name from B, email from C, country from D — write the contact ID to column E either way
The country field has full country names, not ISO codes
In the Students tab, column D has full country names. Convert each to an ISO country code before creating the Quaderno contact, then write the ISO code back into column D and the new contact ID into column E
Some students already exist in Quaderno — I need to avoid duplicates
For each row in the Students tab, check if a Quaderno contact already exists for the email in column C — if yes, write the existing contact ID to column E and skip creation; if no, create the contact using columns A through D and write the new ID to column E
Create all contacts, flag missing jurisdictions, and mark the ones ready for receipt generation in one pass
For each row in the Students tab: if column D has a valid ISO country code, create a Quaderno contact using columns A through D and write the contact ID to column E, then write Ready to column F; if column D is blank, write Missing Country to column F and skip creation
This means you end the operation with a ready/not-ready column already in place, so the receipt generation step can filter immediately.
Try It
Get the 7-day free trial of SheetXAI and open the Google Sheet where your student or customer records live, then ask it to seed your Quaderno contact base before the receipt run. Also see: bulk creating invoices from a sheet, and the hub overview of all Quaderno connection methods.
