# Log Authorize.Net payments to QuickBooks and a reconciliation sheet

> Every settled Authorize.Net capture lands in QuickBooks as a sales receipt and in a Google Sheet so finance can reconcile the two systems automatically.

- Workflow type: code
- Services: Authorize.Net, QuickBooks Online, Google Sheets
- Categories: Finance, Operations
- Published: 2026-07-17

## What it does

- Listens for every settled Authorize.Net capture, including recurring subscription charges, and pulls the payer's email, amount, and card summary.
- Finds the matching QuickBooks customer by email, or creates a new customer record on the fly if this is their first payment.
- Books a QuickBooks sales receipt against that customer for the exact captured amount and references the Authorize.Net transaction id so it's traceable in either system.
- Appends a reconciliation row to a Google Sheet with the date, transaction id, customer name, amount, card last four, and the QuickBooks sales receipt id.
- Skips test-mode transactions and dedupes on the Authorize.Net transaction id so webhook retries never double-book revenue.

## What you'll need

- An Authorize.Net merchant account with webhooks enabled for settled payment captures
- A QuickBooks Online company connected to the workflow
- A Google Sheet with a header row for date, transaction id, customer, amount, card last four, and QuickBooks receipt id

## Prompt

Whenever Authorize.Net captures a new payment (webhook: net.authorize.payment.authcapture.created), sync it deterministically into QuickBooks Online and log a reconciliation row in Google Sheets. This event fires for both one-shot captures and successful recurring subscription charges, and I want to handle both the same way.

Guardrails before doing any work: skip transactions whose testRequest flag is true so sandbox traffic never touches the books, and dedupe on the Authorize.Net transId so webhook retries or duplicate deliveries never double-book revenue. The transId is unique and immutable per transaction, so it's the right idempotency key. If a sales receipt already exists for this transId (either recorded in the reconciliation sheet or discoverable via QuickBooks), stop and do nothing.

Step 1: enrich the webhook. Use Authorize.Net Get Transaction Details on the incoming transId to pull the payer's email, first/last name, settled amount, and card summary (card type and last four digits). The webhook payload itself is thin; Get Transaction Details is where the actual customer and card info live.

Step 2: resolve the customer in QuickBooks. Use QuickBooks Query Entities with a SQL-like query against Customer, matching on the payer's email (for example: SELECT * FROM Customer WHERE PrimaryEmailAddr = '<email>'). If exactly one customer comes back, use them. If no customer matches, fall back to Create Customer with DisplayName built from the payer's name and PrimaryEmailAddr set to the Authorize.Net email, then use the newly created customer. If more than one customer matches the email (rare), pick the most recently updated active one.

Step 3: book the revenue. Use QuickBooks Create Sales Receipt against the matched customer with a single line item for the captured amount, and put the Authorize.Net transId into PaymentRefNum and PrivateNote so finance can search either field to trace the charge. Use TxnDate matching the Authorize.Net settlement date.

Step 4: log for reconciliation. Append a row to the reconciliation Google Sheet using Append Values, with columns in this order: date (Authorize.Net settlement date), transId, customer name, amount, card last four, and the QuickBooks sales receipt id returned from step 3. This is the tie-out finance uses to reconcile Authorize.Net settlement batches against QuickBooks revenue.

If any step fails after the sales receipt is created (for example, the sheet append), still surface the sales receipt id so finance can reconcile manually; do not roll back the receipt. If Get Transaction Details or the customer lookup fails, do not create a sales receipt.

## How to customize

- Point at a different reconciliation sheet, or add columns like currency, product code, or tax amount
- Split one-off sales from recurring subscription charges into separate sheets or QuickBooks accounts
- Route test-mode transactions to a sandbox sheet instead of skipping them

## FAQ

### Does this cover recurring subscription charges too?

Yes. Authorize.Net fires the same capture event for both one-off sales and successful recurring charges, so both flow into QuickBooks and the reconciliation sheet with no extra setup.

### What happens if the payer isn't in QuickBooks yet?

The workflow creates a new customer record on the fly using the email and name from Authorize.Net, then books the sales receipt against that new customer so nothing gets stranded.

### What stops the same payment from being recorded twice?

The Authorize.Net transaction id is unique per charge, and the workflow checks that id before writing anything. Webhook retries and duplicate events never double-book revenue.

### Are test transactions included?

No. Any transaction flagged as a test is skipped so your books and reconciliation sheet only show real captured payments.

### Does this work with QuickBooks Desktop?

This workflow is built for QuickBooks Online. QuickBooks Desktop uses a different data model and isn't supported here.

Use this prompt in General Input: https://www.generalinput.com/prompts/log-authorizenet-payments-to-quickbooks-and-a-reconciliation-sheet