Volume 01 · The Setup Manual

The guide.

Everything you fill in, every toggle that matters, and what happens after you press the button. Read top to bottom, or jump.

~ 12 min read16 sectionsStart at the beginning
01

Install AttiBooks in Attio

AttiBooks lives inside your Attio workspace as a native app. Open Attio, click your workspace name, then Settings → Apps → Browse, search for AttiBooks, and install it. You will need workspace admin permissions.

Now live on the Attio Marketplace. You can also click Get started from the homepage to install through our authorized listing.

02

Link your AttiBooks account

Your Attio workspace is paired with an AttiBooks account — that’s what carries your plan, your invoice quota, and your automation history. Create the account first at attibooks.com/get-started and confirm the verification email we send you.

Then, in Attio, open AttiBooks → Workspace settings → AttiBooks Account and press “Link Account”. A dialog opens with a one-time link — follow it to attibooks.com, confirm the workspace, and you’re paired. The button’s description line then reads Linked to you@company.com (free plan).

One workspace, one account

A workspace can only be linked to a single AttiBooks account. If you see “Already linked elsewhere”, a colleague linked it first — email help@attibooks.com and we’ll move it. Same for unlinking — email us and we’ll unlink it for you.

Linking links: it doesn’t send AttiBooks your Attio API token or your QuickBooks credentials. The app authenticates with a per-workspace secret it mints itself; QuickBooks tokens never leave Attio.

03

Connect QuickBooks

Open AttiBooks in the left sidebar of Attio. The header shows a Connect QuickBooksbutton — clicking it triggers Intuit’s OAuth flow. Sign in to your QuickBooks Online account and authorize access. Attio handles token storage and refresh automatically; you never paste a key.

Once connected, open AttiBooks → Workspace settings → 1. QuickBooks Connection and press “Check Status”. You should see a green success toast with your QuickBooks Company ID. If it reads Not connected, repeat the OAuth flow from the app header.

Required: paste your Company ID

Scroll to 7. Advanced and paste your QBO Company IDinto the required field. Find it in QuickBooks under the gear icon → Additional info (a ~16-digit number). AttiBooks also tries to auto-capture it via OpenID userinfo, but the manual value is the source of truth.

Sandbox vs Production

AttiBooks detects this for you. When you authorize QuickBooks, the app probes Intuit’s userinfo endpoints and remembers which one answered, so sandbox tokens hit the sandbox API and production tokens hit production — even if the Environment field in Section 1 is blank or mistyped. That field is now only a fallback; set it to sandbox or production if you want to pin it explicitly. Re-authorize after switching companies.

04

Choose an invoice mode

AttiBooks ships with two ways to create invoices. You can switch anytime from settings.

invoice_mode = “quick

Quick mode

One click. AttiBooks reads the record, builds the invoice, and submits it to QBO. Best for repeat work.

invoice_mode = “custom

Custom mode

A dialog opens with the full invoice builder — add as many lines as you need, pick a QuickBooks product or service per line, set a tax code, discount and memo. Best for bespoke project work.

Set the invoice_mode field to quick or custom. Quick mode is best for repeatable services with consistent rates. Custom mode is best for project-based work where every invoice is bespoke.

05

Map your source fields

AttiBooks pulls invoice data from the Attio record you click on. Fill in 5. Source Fields (optional) in workspace settings — each field is a dropdown of the real attributes on your target objects, grouped by object. Leave blank to use the template defaults from Section 3.

FieldTypeWhat it does
source_customer_emailstring

Email QuickBooks sends to

Required if you want QBO to deliver the invoice automatically.

source_service_descriptionstring

Line-item description

Falls back to the template default if empty.

source_ratestring

Unit price (per unit)

Number attribute. Reads as the line item rate.

source_quantitystring

Quantity / hours

Number attribute. Multiplied by rate to compute total.

source_currencystring

Three-letter currency code

USD, EUR, GBP. Must exist in your QBO chart of accounts.

source_due_daysstring

Net payment terms

Days from invoice date until due. e.g. 30.

Customer nameis read automatically from the record you act on — company name, person full name, deal name, or workspace record name. You don’t map it.

The dropdown lists attributes from the objects in 7. Advanced → Target Objects. Anything you type is also accepted — that’s how you enter a reference.attribute path like company.name to pull from a linked record one hop away, or a slug on an object outside that list.

06

Set template defaults

When a source field is missing on a record, AttiBooks falls back to these defaults — so you never get a half-built invoice.

FieldTypeWhat it does
template_service_descriptionstring

Default line description

e.g. "Consulting services"

template_ratenumber

Default unit price

e.g. 150

template_quantitynumber

Default quantity

e.g. 1

template_currencystring

Default currency

e.g. USD

template_due_daysnumber

Default net terms

e.g. 30 (days)

template_item_refstring

Default Products & Services item

QuickBooks item id. Keeps invoices posting to the right income account.

template_tax_codestring

Default tax code

TAX or NON on US companies; a tax code id elsewhere.

template_discount_percentnumber

Default discount

0–100. Adds a discount line to every invoice.

Quick mode uses these three for every invoice; custom mode pre-fills them and lets you change them per invoice.

07

Configure writeback fields

After QuickBooks accepts the invoice, AttiBooks writes data back to your Attio record so your CRM reflects reality. Create attributes on your source object and map each one here.

FieldTypeWhat it does
writeback_invoice_idstring

QBO invoice ID

Internal Intuit identifier — keep for support.

writeback_invoice_numberstring

Invoice number

The number your customer sees.

writeback_invoice_statusstatus / string

Open, Paid, Voided

Updates live via webhook.

writeback_invoice_urlurl

QBO deep link

Opens the invoice inside QuickBooks.

writeback_last_sync_attimestamp

Last successful sync

Helps debug stale data.

writeback_sync_errorstring

Last error message

Empty on success. Read this first when something breaks.

writeback_balancenumber

Outstanding balance

0 once the invoice is paid in full. Filter on it to find who owes you.

writeback_amount_paidnumber

Paid so far

Total minus balance, refreshed on every sync, send, push, and reminder.

writeback_due_datedate

Due date as QBO holds it

Use it to build an overdue view in Attio.

writeback_estimate_idstring

QBO estimate ID

Set by the estimate action; read by the convert step.

writeback_estimate_numberstring

Estimate number

The number your customer sees on the quote.

writeback_estimate_statusstatus / string

Pending, Accepted, Converted

Becomes Converted when the estimate turns into an invoice.

writeback_estimate_urlurl

QBO deep link to the estimate

Chase what's unpaid

Map writeback_balance and writeback_due_dateand your CRM can answer “who owes us money, and since when?” without opening QuickBooks — an Attio view filtered on balance greater than zero and due date in the past is your collections list. The reminder block (section 13) works off exactly those two fields.

Errors land in Attio

If QuickBooks rejects an invoice, AttiBooks writes the error directly to the record — no console required, no email missed. Look at writeback_sync_error.

08

Enable the Invoice object

Pro plans can store every invoice as its own Attio record. In 7. Advanced, turn on “Store invoices as Attio records”, then press “Run Setup”. AttiBooks provisions an invoices object with all standard attributes (doc number, status, totals, customer, QBO IDs, sync metadata).

Optionally set invoice_object_slugto point at an existing custom object — useful if you already model invoices and want AttiBooks to write to your schema.

Enabling this object also unlocks two record actions on invoices: Edit Invoice in QuickBooks and Void in QuickBooks (see section 10).

Requires Attio Pro for custom objects. Free Attio workspaces can still use writeback — just on the source record.

09

Create your first invoice

Open any record on a target object. In the actions menu, choose Create QuickBooks invoice. In Quick mode, the invoice is sent to QBO immediately and a success toast confirms the invoice number. In Custom mode, a dialog appears with the full builder: add lines, pick a Products & Services item for each, apply a tax code and a discount, and edit every field before submission.

Within seconds, your record refreshes with the QBO invoice number, status, and a clickable link straight to QuickBooks.

Average time from click to QBO confirmation: ~ 1.4 seconds.
10

Edit and void from Attio

Once the Invoice object is enabled, open any invoice record in Attio and you’ll see two extra actions:

Edit Invoice in QuickBooksopens a dialog for controlled fields — due date and memo always, line items only while the invoice is unpaid. Submitting pushes the change straight to QBO.

Void in QuickBooksasks for confirmation, then voids the invoice via the QBO API and re-syncs so the Attio record reflects the voided state. This is explicit on purpose — AttiBooks never auto-deletes anything in QuickBooks.

QBO is source of truth

Financial fields (totals, balance, dates) are read-only in Attio. All writes flow through QBO, then back to Attio via sync — no two writers, no conflicts.

11

Quote first, invoice later

Not every deal starts with an invoice. AttiBooks can create a QuickBooks estimatefrom the same record data — same field mapping, same line items, tax and discount options — and turn it into an invoice when the deal closes.

Open any record and choose Create QuickBooks Estimate. The estimate number, status, and a link back to QuickBooks are written to the estimate writeback fields from section 7.

When the customer says yes, run the Convert estimate to invoiceworkflow block — typically on a deal reaching Closed Won. It copies the estimate’s lines into a new invoice and links the two together in QuickBooks, so the job reads as one story on their side.

Estimates are free

Creating an estimate doesn’t count against your monthly invoice limit — quote as much as you like. The quota is charged at conversion, because that’s the moment a customer is actually billed. AttiBooks refuses to convert the same estimate twice.

12

Keep invoices in sync

AttiBooks pulls updates from QuickBooks using the Change Data CaptureAPI — only invoices modified since the last run. The first sync backfills recent invoices; every subsequent sync is incremental.

There are three ways to trigger a sync:

FieldTypeWhat it does
Scheduled crondaily

Runs on attibooks.com

Hits /api/cron/sync-invoices at 00:00 UTC every day. Zero config.

Settings buttonmanual

6. Invoice Sync → Sync Now

Force a pull on demand from workspace settings. Useful while setting things up.

Record actionmanual

Sync Invoices from QuickBooks

Available on any record. Same effect as the settings button.

Each sync updates the Invoice object with the latest status, balance, dates, and customer info from QBO. Writes to QBO (creation, edits, voids) happen immediately through the corresponding record actions.

Requires the Invoice object to be enabled (Section 8). Sync is a no-op otherwise — writeback on the source record still works independently.

13

Automate it with Attio workflows

Everything above is a button someone presses. AttiBooks also ships seven workflow blocks so Attio can do it for you. Open Attio → Workflows → New workflow, pick a trigger (record created, stage changed, a scheduled run), then add a step and search for AttiBooks.

Create QuickBooks invoice

Builds an invoice from the record using your mapping and template defaults, then writes the number, status, and link back.

Record · Skip if already invoiced · Line description (optional) · Due in days (optional)

Skips when the record already has an invoice and the checkbox is on.

Sync invoice from QuickBooks

Re-reads the record's invoice in QBO and refreshes its status (Paid, Sent, Voided) in Attio.

Record

Skips when the record has no invoice ID.

Send invoice via QuickBooks

Emails the invoice to the customer through QuickBooks' own delivery, then writes the resulting status back.

Record · Send to (optional override address)

Skips when the record has no invoice ID. Uses the QBO invoice's email otherwise.

Push invoice to QuickBooks

Pushes a new due date and/or memo from Attio onto the existing QBO invoice.

Record · Due date (YYYY-MM-DD, optional) · Memo (optional)

Skips when both fields are empty, and when the values already match QuickBooks.

Remind about an unpaid invoice

Re-sends the invoice when it's overdue and still unpaid. Refreshes the balance either way, so a daily reminder workflow doubles as a payment sync.

Record · Days past due · Minimum days between reminders · Send to (optional)

Skips paid invoices, invoices not yet overdue, and anything reminded inside the cooldown.

Create QuickBooks estimate

Creates a quote from the record — same mapping as an invoice, same line/tax/discount options. Doesn't touch your monthly invoice limit.

Record · Skip if already estimated · Line items · Tax code · Discount % · Valid for (days)

Skips when the record already carries an estimate and the checkbox is on.

Convert estimate to invoice

Turns the record's estimate into an invoice, linked back to it in QuickBooks. Put it on 'deal reaches Closed Won'.

Record

Skips when there's no estimate, and when the record already has an invoice — converting twice would bill twice.

Each block reads the same workspace settings you filled in above — the field mapping, the writeback attributes, the template defaults. Nothing to configure twice. Every block writes its result back to the record, and failures land in writeback_sync_error exactly like manual runs do.

Blocks branch on their outcome, so you can chain them: create an invoice when a deal is won, send it, then sync it back on a schedule until it’s paid.

Loop protection

Create, send, push, remind, and estimate are each capped at 50 runs per hour per workspace, counted separately. A run over the cap is logged as rate cappedand retried later rather than dropped. Push also compares against QuickBooks first and skips when nothing actually changed — safe to wire straight onto a record-updated trigger.

Every run — created, synced, sent, pushed, skipped, failed — is recorded with its reason and shows up in your dashboard activity feed.

Invoices created by a workflow count against your monthly quota the same as manual ones — including an estimate you convert, since that’s the moment the customer is billed. Sync, send, push, remind, and creating an estimate don’t.

14

Your AttiBooks dashboard

Sign in at attibooks.com/login to see the account side of things: which Attio workspaces are linked, the plan on each one, invoices used this month against your limit, and the last runs of every automation with their status and skip reason.

Until setup is finished, the dashboard shows a checklist — verify email, link a workspace, connect QuickBooks, create your first invoice — and refreshes itself as you complete each step in Attio. Once it’s green, it turns into a status page.

Billing lives here too. Each workspace card carries Upgrade (monthly or yearly), Manage billing— which opens Stripe’s customer portal for invoices, card changes, and cancellation — and Unlink, which detaches that Attio workspace from your account. Unlinking stops AttiBooks working in that workspace until you link it again; invoices already in QuickBooks are untouched.

Tell me when something breaks

Turn on failure alertsper workspace and we email you when an automation run fails — or post it to a Slack incoming webhook, or both. You get at most one alert an hour, no matter how many runs fail in it, so a bad night doesn’t bury your inbox.

15

Plans & limits

Free

$0/mo

  • 10 invoices per month
  • Quick mode
  • One-way QBO → Attio sync

Pro

$29/mo

  • Unlimited invoices
  • Custom mode + Invoice object
  • Full two-way sync

Hit the free limit and AttiBooks blocks new invoice creation until next month or until you upgrade. Existing invoices keep syncing — nothing is locked retroactively.

Section 16

Every feature, briefly.

A quick reference to everything AttiBooks does — pin this section.

  • 01

    One-click invoice creation

    From any Companies, Deals, or custom record.

  • 02

    Quick & Custom modes

    Speed when you want it, control when you need it.

  • 03

    Seven workflow blocks

    Create, sync, send, push, remind, estimate, and convert — from Attio workflows.

  • 04

    Multi-line invoices

    As many lines as you need, each with a QuickBooks product or service.

  • 05

    Tax codes & discounts

    Per-invoice tax code and a percentage or fixed discount line.

  • 06

    Estimates

    Quote from a record, convert to an invoice when the deal closes.

  • 07

    Payment tracking

    Balance, amount paid, and due date written back on every touch.

  • 08

    Overdue reminders

    Re-send unpaid invoices on a schedule, with a per-invoice cooldown.

  • 09

    Attribute pickers

    Map fields from a dropdown of your real Attio attributes.

  • 10

    Failure alerts

    Email or Slack when a run fails, throttled to one an hour.

  • 11

    Self-serve billing

    Upgrade, manage the subscription, or unlink a workspace yourself.

  • 12

    Loop-safe automations

    Hourly caps per action, plus a no-change guard on push.

  • 13

    Send via QuickBooks

    Email the invoice through QBO delivery — manually or automatically.

  • 14

    CDC pull sync

    QBO Change Data Capture — only the invoices that actually moved.

  • 15

    Daily cron + manual sync

    Scheduled pull at 00:00 UTC, plus button and record action.

  • 16

    Edit & Void from Attio

    Controlled push-back to QBO on due date, memo, and line items.

  • 17

    Field mapping

    Map any Attio attribute to any QBO invoice field.

  • 18

    Template defaults

    Fallbacks for missing fields — invoices never break.

  • 19

    Multi-object support

    Companies, Deals, or any custom object you create.

  • 20

    Invoice object (Pro)

    Optional Attio object that stores every invoice.

  • 21

    Environment auto-detect

    Sandbox or production resolved from the token itself.

  • 22

    Auto-refreshed OAuth

    Attio handles token refresh — no key management.

  • 23

    Errors written to Attio

    writeback_sync_error surfaces failures in your CRM.

  • 24

    Run history

    Every automation run logged with status and skip reason.

  • 25

    Account dashboard

    Onboarding checklist, plan, usage, and recent activity.

  • 26

    Usage metering

    Free 10/mo, then unlimited on Pro. Tracked in real time.

  • 27

    Stripe billing

    Self-serve upgrades & cancellations via customer portal.

“A good invoice is the one that gets paid —a great one is the one you barely had to make.”