DeepLedger
Menu

Bookkeeping

How to Create QuickBooks Invoices with Grok and Verify Them

Have Grok prepare a QuickBooks Online invoice, approve the exact fields in the chat, then check what QuickBooks saved before anyone sends it.

Published by DeepLedger8 min read

To create a QuickBooks Online invoice with Grok, connect Grok to QuickBooks through an MCP server, ask Grok to prepare the invoice, approve the exact fields in the chat, then check the saved invoice in QuickBooks before it is sent. This guide uses DeepLedger's hosted MCP server in Grok chat. The company, customer and amounts below are fictional.

Is there an official Intuit integration for Grok?

We found none. Intuit's fall 2026 product update lists QuickBooks connectors for ChatGPT, Claude, Gemini, Perplexity and Muse from Meta. Intuit's July 28, 2026 announcement of invoicing inside Claude and ChatGPT names Anthropic and OpenAI. Neither page mentions Grok or xAI.

Grok therefore reaches QuickBooks through a third-party MCP server. DeepLedger is one. CData publishes a Grok guide for its Connect AI server using the xAI SDK, and Composio's Grok Bot toolkit lists a Create Invoice tool. The steps below apply to DeepLedger only.

Connect Grok and confirm the company

  1. In DeepLedger, open Settings → Companies and connect the QuickBooks Online company if it is not connected yet.
  2. In Grok, open grok.com/connectors, choose New Connector, then Custom, and enter https://mcp.deepledger.ai/mcp.
  3. Sign in to DeepLedger when Grok asks.

Business and Enterprise teams need an admin to provision connectors first. The Grok setup guide covers this, plus Grok Bot and the xAI API.

Start every invoice session by checking the company:

Using DeepLedger, which company am I in? List the companies I can
access. Do not create or change anything.

If the active company is wrong, ask Grok to switch by name and read the company it reports back. Your active company is shared across all your connected AI clients, so a switch in another session moves this one too. See working in several QuickBooks companies.

Gather what the invoice needs

DeepLedger's invoice tool needs a customer, an invoice date and at least one line. Each line should name an existing product or service item. Without one, QuickBooks puts a default item and its income account on the line.

DetailFictional exampleWhat to check
CompanyHarbor Design Co.Is this the company Grok reported?
CustomerMaple Row DentalDoes this exact customer exist?
ItemBrand design (service)Which existing item and income account?
Quantity and rate6 hours at $150Does it match the agreed work?
Invoice and due datesNovember 2 and December 2, 2026Are these the agreed terms?
Subtotal$900Is quantity times rate correct?
Sales taxNot decided yetWhat applies to this customer and service?
Billing emailbilling@maplerowdental.exampleWhich address should receive the invoice?

Leave tax open until Grok has read the company profile, which reports whether sales tax is turned on. Do not let Grok assume "no tax" to finish the example.

Set the billing email on the invoice itself. QuickBooks does not copy the customer's email onto an invoice created through the API, and it sends to the address stored on the invoice unless you give a different recipient when you send.

Ask for a proposal before any write

Using DeepLedger, confirm the active company is Harbor Design Co.
Look up the customer Maple Row Dental and the brand design service
item. Check for open invoices for this customer.

Prepare an invoice proposal: 6 hours of brand design at $150 per
hour, invoice date November 2, 2026, due December 2, 2026, billing
email billing@maplerowdental.example. Show the matched customer and
item with their QuickBooks IDs, each line, the subtotal, the sales tax
treatment, the billing email and the total. Ask me about anything
missing or ambiguous. Do not create, send or change anything yet.

Everything Grok does here is a read: the company profile, the customer and item lookups, and a list of the customer's open invoices. If an open invoice already covers this work, stop. DeepLedger's invoice tool tells the model to check open invoices before creating one, but that is guidance to the model, not a block, so ask for it in the prompt.

A similar customer name is not a match. If Grok finds two candidates, pick one by its ID.

What the approval step looks like

xAI's connector documentation says Grok can use a built-in connector's tools automatically when your question relates to that service. It does not describe a confirmation screen before any connector's tool call, including custom connectors like DeepLedger. On the xAI API, the remote MCP documentation says the require_approval parameter is not supported.

DeepLedger's invoice tool has no approval gate either. So the approval is your next message, and the proposal prompt only asks Grok to wait for it. That is an instruction Grok should follow, not an enforced control: nothing on the server stops the write if Grok calls the tool early. Reply with the exact invoice you approve:

Approved. Create one invoice in Harbor Design Co. for Maple Row
Dental: one line, brand design service item, quantity 6, rate $150,
no sales tax, invoice date 2026-11-02, due date 2026-12-02,
billing email billing@maplerowdental.example. Do not email it, do not mark it to send later, and do not record a
payment. Then read the invoice back from QuickBooks.

Replace "no sales tax" with the treatment you confirmed. If any field differs from the proposal you read, do not approve it.

Grok then calls DeepLedger's qbInvoice tool. Before writing, DeepLedger refuses impossible dates such as February 30, because QuickBooks would otherwise book the invoice on today's date. After writing, it checks selected fields it sent, such as the invoice date, due date, terms, billing email and tax code, against what QuickBooks stored. On a new invoice, a checked field QuickBooks did not keep comes back as a warning. On an update, it fails with NOT_APPLIED and lists the fields, although the rest of the update was saved. The result also returns the invoice ID and number, customer, lines, tax, total and open balance, but the customer and the line amounts, quantities, rates and descriptions are returned, not compared. Check those yourself.

If your DeepLedger access to the company is Read-only, the write is refused with a message saying you can view the company but cannot make changes. See read-only QuickBooks MCP access.

Check the saved invoice in QuickBooks

Open the invoice in QuickBooks Online and compare it with your source:

  • Company and customer
  • Invoice number and ID
  • Invoice date, due date and terms
  • Billing email
  • Item, quantity, rate and line description
  • Sales tax, total and open balance

A success message from Grok is not the check. Read the stored fields. If the request timed out or the reply was unclear, search QuickBooks for the invoice by customer, date and amount before asking again. Repeating the request can create a duplicate. The duplicate invoice checklist explains how to look.

To change an invoice that already exists, give Grok the invoice ID. Be careful with lines: lines sent on an update replace every stored line, so a partial list deletes the rest.

Send the invoice as a separate decision

Recording an invoice sends nothing to the customer. Storing an email address on it sends nothing either. Setting NeedToSend only puts it in QuickBooks' send later list for a person to send.

You can send the checked invoice from QuickBooks yourself. Or ask Grok:

Using DeepLedger, find invoice 1047 for Maple Row Dental and give me
its QuickBooks ID. Show the billing email stored on it and the total.
Wait for my confirmation, then email that invoice ID through
QuickBooks to the stored address.

Use your real invoice number. The email tool needs the invoice's QuickBooks ID, not the invoice number you see on the form. If the invoice has no stored email, the tool refuses with NO_EMAIL_ADDRESS and sends nothing. Add the address to the invoice, or give Grok an address to send to.

DeepLedger's email tool is the only one that emails a customer, and it sends through QuickBooks. DeepLedger asks for confirmation before the send only in AI clients that support MCP confirmation requests. We have not confirmed whether Grok does, so treat the wait in the prompt as an instruction, not a lock. Three things to know before you approve it:

  • An email cannot be unsent, and every call sends again. Do not resend "to be sure".
  • Sending to a different address permanently replaces the email stored on the invoice.
  • Voided invoices are refused.

DeepLedger reports the send as delivered only when QuickBooks returns a delivery time. Recording or sending an invoice is also not a payment. Record payments separately when the money arrives.

Next steps

Frequently asked questions

Can Grok create invoices in QuickBooks Online?

Yes, through an MCP server that exposes an invoice tool. This guide uses DeepLedger, added in Grok at grok.com/connectors. Grok prepares the invoice, you approve it in the chat, and DeepLedger's invoice tool records it in the active QuickBooks company.

Does Intuit have an official Grok integration for QuickBooks?

We found none as of November 2, 2026. Intuit's fall 2026 update lists QuickBooks connectors for ChatGPT, Claude, Gemini, Perplexity and Muse from Meta. Grok and xAI are not mentioned there or in Intuit's July 2026 announcement about invoicing in Claude and ChatGPT.

Does Grok ask for approval before it creates the invoice?

Not as an enforced step. xAI's connector documentation does not describe a confirmation before a tool call, and DeepLedger's invoice tool has no approval gate. Asking Grok to show the proposal and wait for your reply is an instruction Grok should follow, not a control that blocks the write, so check the saved invoice in QuickBooks.

Does creating the invoice email it to the customer?

No. DeepLedger's invoice tool records the invoice and sends nothing. Emailing is a separate tool. DeepLedger asks for confirmation before a send only in AI clients that support MCP confirmation requests; otherwise your instruction is the only thing stopping Grok from calling it. The NeedToSend status only puts the invoice in QuickBooks' send later list.

Ready to get started?

Connect QuickBooks and try your first task with an AI agent.

Create an Account