APSync Training

Handling Contacts

This course is for anyone who takes orders, processes online orders, or touches a customer record in HubSpot. It explains one idea, one customer, one number, why the systems keep breaking that idea today, and what a small new piece of APSync does about it: mostly automatically, and sometimes by asking you a question.

Nothing described here has run against the real HubSpot yet. It is being shown to you first as a proof of concept on the AP Test portal, with made-up email addresses, so you can see what it does and change the rules before it touches anything real.

Why this comes up at all

You have probably seen one of these:

None of these are mistakes anyone made. They are what happens when three systems that each keep customers differently are asked to agree.

One customer, one number

Here is the whole model in three sentences.

  1. A customer is someone (or an organisation) we can bill. Every customer has exactly one customer number, and no two customers share one. Two people at the same agency who both order are two customers with two numbers; what they share is the company, not the number.
  2. A customer can have several ways to be reached: more than one email address over the years, a work phone and a mobile. All of them belong to that one customer. A new email address is not a new customer.
  3. A customer can have several addresses, each with a job: where the bill goes, where the box goes.
flowchart LR
  C["Customer<br/>customer number 265189<br/>Heather Strang"]
  E1["email<br/>heather@agency.org"]
  E2["email<br/>hstrang@gmail.com"]
  P1["phone<br/>555-0142"]
  A1["billing address<br/>12 Main St"]
  A2["shipping address<br/>Program site, Bldg B"]
  C --- E1
  C --- E2
  C --- P1
  C --- A1
  C --- A2

That is it. Everything else in this course is about the gap between this picture and how each system stores it.

How each system sees a customer today

MOM gives a customer number to every record it makes, and it makes a record for a lot of things that are not customers: a second shipping address gets its own number, a person we once shipped to on someone else's order gets their own number, a catalog request gets one. So MOM has about 144,000 customer records for roughly 62,000 customers who have ever placed an order. When two of those records share an email, MOM cannot tell you whether that is one person with two addresses or two people at one email address.

HubSpot knows a contact by its email address, and only by that. If a customer checks out under a second address, HubSpot makes a second contact; it has no way to know they are the same person. HubSpot cannot be changed to match on name, and its support has confirmed that in writing. It also does not mint customer numbers; the number is a field someone has to fill.

The website knows a buyer by their login email. It has no idea what a customer number is, and it never will.

And the people. Each of us has been carrying one piece of the real model in our head: "number first, then email" is the right order of keys; "type the number the day after the order" is the matching being done by a person; "HubSpot should catch that duplicate" is true for an email HubSpot has already seen and false for a new one. All three are right about part of it. The point of this work is to write the whole thing down once, and have the system carry it.

What has actually been happening

When a web order comes in from someone HubSpot has not seen under that email, HubSpot creates a contact with no customer number. APSync needs that number to build the invoice, so Revise Invoice stops and says so. Meanwhile HubSpot's own sync sends the unfinished invoice to QuickBooks anyway, with only the product lines, and that failure shows up nowhere. The fix, until now, has been a person typing the number in after the order is keyed into MOM.

Measured on the real data on 2026-09-12:

What the new piece does

APSync now has a resolver. Think of it as the person who used to type the numbers, except it runs every time, remembers every answer, and only asks a human when it should. It does three things, in this order.

First, it clears the backlog, mostly by itself. Against the real data this means roughly:

It does this on its ownabout
Puts the MOM number on a HubSpot contact whose email matches exactly one MOM customer470 contacts
Merges two HubSpot contacts that are plainly the same person (same name at the same zip or phone), keeping the one with the number330 merges
Fills in blanks from MOM: zip codes, addresses, a second phone590 contacts
Creates a HubSpot contact for an active MOM customer who has none330 contacts
Leaves a MOM ship-to-only record alone instead of making it a contact700 records

Second, it asks a person about the rest. About 730 cases where two records might be one person, or one record might be two people, and only someone who knows the customers can say. Those go to a page in APSync called Contact cases, one question each, with three buttons. See How to resolve contact cases. Your answer is kept forever; the resolver never asks the same question twice.

Third, it keeps doing this as new contacts arrive. A new web order under a known email gets its number stamped. A new order from a known customer under a new email gets merged into their existing contact; the new email becomes a second address on that contact, and the old one is not overwritten. A genuinely new customer gets a new number, minted by APSync after the resolver has confirmed nobody matches. Only the ambiguous ones reach a person.

What it never does: delete a contact, invent a number for someone who might already have one, overwrite an email, change MOM, or touch a record that is not part of a case.

What this means for you

If you take orders (Sales)

If you process online orders (Ops)

If you are asked to resolve cases

What you will see in the proof of concept

The decisions we still need from the business

  1. When is a number born for a brand-new web buyer: at their first order, or as soon as they register?
  2. Two people ordering through one shared email address: HubSpot can only give the email to one contact. Which one, and does the other get a contact at all?
  3. Which email is primary for a customer with several: the one most recently used to buy, or something else?
  4. After a "same person" decision, what happens to the losing number in MOM?
  5. The 36,000 website logins that never bought: keep them in HubSpot, mark them, or archive them?

Words used here