← All guides

Payments know a card; the club knows a member

Sync Your Golf Roster with Square Customers (Without Double Entry)

Members in one system and Square Customers in another means missed receipts and messy CRM. Here’s how roster ↔ Square directory sync should work.

Two directories, one person

Square is excellent at cards, Terminals, and receipts. Golf clubs are excellent at knowing who has a handicaps index, a house balance, and a preferred Saturday time. Trouble starts when those worlds never meet.

Staff create a member in the club software, then create nearly the same person in Square Dashboard for a retail sale. Walk-ins who booked online never become customers. Marketing and receipts cannot find the people who actually play.

Upsert on accept

Whenever the club accepts golfer identity - roster create, public book with email, staff walk-in with email - attempt a Square Customers upsert. Keep the Square customer id on the booking or member row so later card payments and refunds attach to the right person.

Walk-ins should not clutter the member roster. Put them in a Square group such as “{club} · Public golfers” so retail and CRM stay tidy while still capturing the email you already required for the booking.

Staff sync and inbound webhooks

Give staff a Sync Square directory action for catch-up after imports or outages. Membership plans can map to Square Groups when you want plan cohorts visible beside payments.

Inbound customer.* webhooks keep the club copy honest when someone edits a customer in Square. The goal is two-way truth, not a one-time CSV dump.

Why this matters on Saturday

A synced directory means the person who prepaid a tee time on Square is the same person who buys a hat at the counter an hour later. Refunds, receipts, and house-account decisions stop depending on who remembered to search Dashboard.