Find or Create a RepairShopr Customer
This guide explains how to use the Arigato action to look up a customer in RepairShopr and create a new record only when no match exists. This is the recommended customer action for most workflows — it short-circuits to the existing customer when one is found and never duplicates records. The match logic is layered: email exact match first, then phone or mobile cross-field match, then business name + full name for B2B scenarios, and finally falls back to creating a new customer.
Configuring the Action
Before using this action, you must connect your RepairShopr account through the Arigato Integrations page. See the RepairShopr Integration guide for setup.
| Field Name | Description | Example |
|---|---|---|
| Required. Email address used to search for an existing customer, and stored on the customer record if a new one is created. Supports Twig tokens. | {{ customer.email }} |
|
| First Name | Required. Used when creating a new customer if none is found. | {{ customer.first_name }} |
| Last Name | Required. Used when creating a new customer if none is found. | {{ customer.last_name }} |
| Business Name | Optional. Business or company name. Used as a fallback match signal for B2B workflows, and stored on the customer record when creating. | {{ customer.default_address.company }} |
| Phone | Optional. Primary phone number (typically a landline or office number). Used as a disambiguator on lookup. | {{ customer.default_address.phone }} |
| Mobile | Optional. Mobile phone number — SMS opt-in in RepairShopr targets this field, not Phone. Used as a disambiguator on lookup. | {{ customer.phone }} |
| Address | Optional. Street address. Stored on the customer record when creating. | {{ customer.default_address.address1 }} |
| Address Line 2 | Optional. Apartment, suite, unit, or floor. | {{ customer.default_address.address2 }} |
| City | Optional. | {{ customer.default_address.city }} |
| State | Optional. | {{ customer.default_address.province_code }} |
| Zip | Optional. | {{ customer.default_address.zip }} |
| Notes | Optional. Free-form notes stored on the customer record when creating. | Imported from Shopify order {{ object.name }} |
How Matching Works
The action runs four layers of lookups, in order, and stops at the first one that returns a confident match:
- Email exact match — case-insensitive, trimmed. Substring hits (e.g.
jane@example.comagainst a storedjane@example.com.au) are rejected. When multiple records share the same email (a known RepairShopr state), the candidate whose phone, mobile, business name, or name agrees most with your inputs is selected. - Phone or mobile cross-field match — both phone and mobile inputs are searched, against both the phone and mobile fields on candidate records. This is the primary defense against the common “Shopify’s phone is stored in RepairShopr’s mobile field” duplicate scenario.
- Business name + full name strict match — B2B scenarios. Requires all three of business name, first name, and last name to be set and to match exactly. Skips when more than one candidate matches, to avoid guessing.
- Create — if no earlier layer matched, a new customer is created using all the fields you provided.
Output Tokens
| Token | Description |
|---|---|
response.customer_id |
The matched or newly-created customer’s RepairShopr ID. |
response.customer_name |
The customer’s full name. |
response.created |
true when a new customer was created, false when an existing one was found. |
response.online_profile_url |
The customer-facing portal link for the customer. |
Example Configuration
Ensure the customer on a triggering Shopify order exists in RepairShopr, capturing their phone in the right field for SMS opt-in:
- Email:
{{ object.customer.email }} - First Name:
{{ object.customer.first_name }} - Last Name:
{{ object.customer.last_name }} - Mobile:
{{ object.customer.phone }} - Notes:
Auto-created from Shopify order {{ object.name }}
The returned {{ response.customer_id }} can be passed straight into a Create a RepairShopr Ticket action.
Troubleshooting & Usage Tips
The action errors with “Email cannot be blank.” The rendered email is empty. Use a condition step on the workflow to guard against guest-checkout triggers where object.customer.email can be null, or pull the email from object.email on the order itself.
The action errors with “... is not a valid email address.” Malformed emails are rejected up front to prevent junk records that would magnetise future duplicates. Clean the source data (e.g. strip whitespace, validate format) before the action runs.
A new customer was created when I expected an existing match. The email exact match is intentionally strict (substring hits rejected). Check the stored email in RepairShopr for casing or whitespace differences. The action’s log message includes a “Matched Via” line that tells you which layer made the match — useful when debugging unexpected outcomes.
Phone vs. Mobile. RepairShopr’s SMS opt-in feature targets the Mobile field. Map Shopify’s customer.phone to Mobile so SMS notifications work and so the phone-match layer can use it as a disambiguator.
Credit Cost
Find or Create a RepairShopr Customer incurs a cost of one Action Credit on Lite plans and is unlimited on Unlimited plans.
Custom Actions
This is the recommended customer action for any ongoing Shopify-triggered workflow, such as:
- Ensuring a RepairShopr record exists before creating a repair ticket from a Shopify order.
- Auto-syncing newly-created Shopify customers into RepairShopr so the record is ready when they walk in.
- Onboarding B2B customers placed on a Shopify company account — the business-name fallback handles the case where multiple staff at one company place orders.