How to Create a Reconciliation Report in Google Sheets

Cody Schneider

Manually comparing two sets of data to find mismatched entries can feel like searching for a needle in a haystack. Building a reconciliation report helps turn that frustrating task into a straightforward process, and Google Sheets has all the tools you need to get it done. This guide will walk you through creating a reconciliation report from scratch, step by step.

What Exactly Is a Reconciliation Report?

A reconciliation report is simply a way to compare two or more datasets to identify and explain any differences between them. The goal is to ensure your records are consistent, accurate, and complete. Think of it as balancing your checkbook, but on a larger scale for business data.

You might use a reconciliation report to:

  • Compare transactions from your Shopify store against payouts from Stripe or another payment processor.

  • Match leads captured in your CRM (like Salesforce) against form submissions in a marketing platform (like HubSpot).

  • Line up your recorded ad spend from Facebook Ads with invoices in your accounting software.

  • Verify that inventory shipped from your warehouse matches the sales orders in your e-commerce platform.

Without regular reconciliation, small errors can snowball into significant problems, leading to inaccurate financial statements, failed customer orders, or a misleading picture of your marketing ROI.

Step 1: Gather and Organize Your Data

Before you can write a single formula, you need clean, organized data. This step is the foundation for everything that follows.

1. Export and Import Your Data

Start by exporting the necessary data from your two sources, usually as CSV files. For instance, you might export your "Order History" from Shopify and your "Transaction Log" from Stripe.

Next, create a new Google Sheet and import each CSV file into its own separate sheet (tab). Give each tab a clear, descriptive name like "Shopify_Orders" and "Stripe_Transactions". This simple step saves a lot of confusion later.

2. Identify a Unique Identifier

For a reconciliation to work, you need a common piece of information – a unique ID – that exists in both datasets. This is the key that links a record in one list to its corresponding record in the other.

Common unique identifiers include:

  • Order Number

  • Transaction ID

  • Customer Email Address

  • Invoice Number

  • Shipment Tracking Number

Look at your two datasets and find the column that serves as this unique identifier. If one doesn't exist, reconciliation becomes much more difficult and may require matching on multiple fields like date and customer name, which is more prone to error.

3. Tidy Up Your Data

Data exported from different systems rarely looks identical. Take a moment to scan for issues that could trip up your formulas:

  • Extra Spaces: Use the TRIM function to remove leading or trailing spaces. Create a new column and use the formula =TRIM(A2) and drag it down.

  • Formatting Differences: Ensure dates and numbers are formatted consistently across both sheets. Select the column, go to Format > Number, and choose the correct format.

Step 2: Compare the Datasets with Formulas

Now it's time to build the core logic of your reconciliation report. You're going to add a new column to your primary dataset (e.g., "Shopify_Orders") that checks if each record exists in the secondary dataset (e.g., "Stripe_Transactions").

There are a few great ways to accomplish this in Google Sheets.

Method 1: The Fast and Easy COUNTIF Function

For a straightforward "found" or "not found" check, COUNTIF is often the simplest and most efficient tool. It counts how many times a specific value appears in a range of cells.

Here’s how to use it:

  1. In your "Shopify_Orders" sheet, create a new column and name it something like "Matched in Stripe?".

  2. Let's assume your unique Order IDs are in column A in both the "Shopify_Orders" sheet and the "Stripe_Transactions" sheet.

  3. In the first cell of your new column (e.g., cell D2), enter the following formula:

  1. Press Enter and drag the small blue square at the corner of the cell all the way down to apply the formula to the entire column.

Let's break down that formula:

  • COUNTIF(Stripe_Transactions!A:A, A2): This part counts how many times the value from cell A2 (the Order ID in your Shopify sheet) appears anywhere in column A of the "Stripe_Transactions" sheet.

  • > 0: This checks if the count is greater than zero. If it is, the Order ID was found.

  • IF(..., "Matched", "Not Matched"): This statement displays "Matched" if the condition is true (the count is > 0) and "Not Matched" if it's false (the count is 0).

Method 2: The Classic VLOOKUP Function

VLOOKUP goes a step further than COUNTIF. Instead of just telling you if a match was found, it can also pull in corresponding data from the other sheet, like the transaction amount or status. This is extremely useful for checking if a matched record's value is also the same.

Here's the setup:

  1. Just like before, add a "Matched in Stripe?" column to your "Shopify_Orders" sheet.

  2. Assume Order IDs are in column A, and you also want to pull the transaction amount from column C of the "Stripe_Transactions" sheet.

  3. In the first cell of your new column, you can use a formula like this to flag mismatches:

  1. Drag the formula down the column.

Breaking down the VLOOKUP formula:

  • VLOOKUP(A2, Stripe_Transactions!A:C, 3, FALSE): Looks for the value in cell A2. It searches in the range Stripe_Transactions!A:C, where the first column must contain the unique identifier. If found, returns the value from the third column of that range.

  • FALSE: Ensures an exact match is required.

  • IFERROR(..., "Not Found"): If VLOOKUP doesn't find a match, it returns #N/A. The IFERROR function catches this and displays "Not Found" instead, which is cleaner.

Step 3: Analyze the Discrepancies

You've done the heavy lifting. Now you have a column that clearly labels every record as "Matched" or "Not Matched." The final step is to investigate the mismatches.

Filter for Mismatched Records

The easiest way to see all your discrepancies is by using the filter feature.

  1. Select the entire header row of your sheet.

  2. Go to Data > Create a filter. Small funnel icons will appear at the top of each column.

  3. Click the funnel icon in your reconciliation column (e.g., "Matched in Stripe?").

  4. Uncheck "Matched" and click OK. The sheet will now only display the rows for "Not Matched" records.

Investigate the "Why"

This filtered list is your action plan. For each mismatched record, ask why it didn't reconcile. Common culprits include:

  • Timing Differences: An order from late last night might not have been processed by your payment gateway yet.

  • Manual Data Entry Errors: A mistyped reference ID could be the simple cause.

  • Refunds or Cancellations: An order might exist in your e-commerce system but was refunded before the payment processed.

  • System Integration Gaps: An API might have failed momentarily, causing a record to not be passed from one system to the other.

Armed with this information, you can correct the errors in your source systems, ensuring your data becomes more accurate over time.

Final Thoughts

Learning how to build a reconciliation report in Google Sheets is a powerful skill. By using functions like COUNTIF and VLOOKUP to compare datasets, you can move from guesswork to a clear, systematic process for maintaining data accuracy and uncovering costly operational issues before they grow.

Of course, this process highlights the biggest challenge of reporting: the endless cycle of exporting CSVs and manually wrangling data in spreadsheets. At Graphed, we built our platform to eliminate this exact frustration. By connecting directly to tools like Shopify, Google Analytics, Salesforce, and Facebook Ads, we let you bring all your data together in one place automatically. You can then use simple natural language prompts to create detailed, real-time dashboards, freeing you to focus on finding insights instead of tedious reconciliation tasks.