Automated tax registration for wholesale accounts

Helping a US multi-brand retailer save three months of manual tax registration work across 1,486 wholesale accounts

Astral Health & Beauty is an Atlanta-based beauty company that owns a line of brands, such as COSMEDIX, butter LONDON, PÜR, and Aloette.

Wholesale drives the business. Resellers like medspas, clinics, and salons buy products in bulk, then sell them to their own clients. Each brand runs its own Shopify Plus B2B store, where every reseller is a company account with negotiated pricing and multiple shipping locations, often across several states.

NetSuite had long been Astral Brand’s the system that recorded it all. Accounts are created in the ERP once and sync one way into each Shopify B2B store, ready to order without anyone re-entering them.

That's where things get complicated. Resellers are exempt from sales tax, but in the US both the rate and the exemption depend on the state an order ships to, not where the head office is. Getting tax right means the tax engine has to know every location.

At Astral Brands, their tax calculation app didn't, and DigitalSuits was brought in to fix that.

Country

USA

Partnership period

December 2024 – May 2025

Technologies

Shopify, Shopify Plus, Node.js, AWS (Serverless, Lambda, CloudWatch)

The challenge

Tax stopped being calculated the moment an order shipped to a second address

Astral Brands used Avalara (AvaTax) to calculate sales tax and apply reseller exemptions. Wholesale accounts sync from NetSuite into Shopify B2B, where a reseller exists as one company with its own shipping locations. Avalara had no way to handle those locations automatically. It registered the first one as the customer and folded everything else into it, so a reseller with ten sites arrived as a single record carrying the head office address.

Shopify tracked orders by location while Avalara did not. An order delivered to a reseller's New Jersey site was recorded against that reseller's head office in another state. Ship a hundred units to one state, and none to another, and the tax records showed it the other way round.

In the US, that matters more than in most markets. Tax follows the delivery address, and each state sets its own rate, filing rules, and exemption certificate. A reseller with sites in New York, New Jersey, and Washington needs all three registered separately. With only the head office in Avalara, both the rate and the certificate were applied against an address the goods never went to.

Astral Brands raised it with Avalara, who said the problem was on Shopify's side. Shopify said the opposite and pointed to Avalara's side. Neither one owned it, and nothing moved, meanwhile, the stores kept selling and the returns kept going out.

Even though no penalties were issued, the chances were extremely high. Astral Brands was filing returns built on misattributed data: too much revenue against the head office's state, too little in the states where the goods were actually delivered. Resellers exempt in their own state could also be charged tax they did not owe.

Fixing it by hand was a 495-hour job: 1,486 wholesale companies across two B2B stores, at about 20 minutes to register each in Avalara. In total, it is close to three months of full-time data entry before a single new account was added.

The solution

A middleware layer that keeps Shopify B2B and Avalara in sync

Avalara and Shopify each said the problem was on the other side, so we didn't ask either of them to change anything. Instead, we offered our own solution, and that’s exactly where DigitalSuits took things over.

A proof of concept built live on the discovery call

Before quoting the work, the team ran a short discovery phase: reading the AvaTax API, mapping how NetSuite already fed Shopify B2B, and talking to the people who handled orders day to day.

As a result, we've settled on an approach worth testing: instead of creating one Avalara customer per reseller, we'd create a main customer record for the company and a separate Avalara customer for each Shopify location. We'd then link the location records to the main customer as departments. Each location would have its own address, so AvaTax could calculate tax based on the actual destination.

The team set it up by hand in Avalara during a call with Astral Brands and showed tax calculating correctly for a second location. The client approved the build off that demo.

A fix that didn't wait on either vendor

We then built a separate service that sits between the two and talks to both through their APIs. Astral Brands' Shopify stores, NetSuite sync, and Avalara setup stayed exactly as they were, with no reconfigurations and no risk to the systems the business runs on.

Knowing the AvaTax API well mattered here. Avalara stores company data and tax settings in separate services, linked by an ID. Our integration handles both, so every location lands in Avalara already attached to the right tax configuration.

Every new location is registered automatically

From now on, whenever NetSuite adds or updates a company or location in Shopify, the integration picks it up within moments:

  1. Shopify sends a webhook, and the integration confirms it right away and queues the change, so Shopify never waits on Avalara.
  2. The integration checks whether the company and location already exist in Avalara, then creates or updates the record and links it to the parent company's ship-to data.
  3. If a call fails, it's retried automatically. Anything that still fails is logged, so no location silently goes missing.

No one at Astral Brands has to touch Avalara when a reseller opens a new site.

1,486 accounts moved across without 495 hours of data entry

Webhooks now handle what happens next, but 1,486 resellers were already in Shopify with a single address in Avalara. Instead of three months of manual work, we built a one-off backfill that walks through every company in Shopify, creates its main Avalara customer, and registers each location.

It runs company by company, so a failed account can be retried on its own, and the run can pause and resume without starting the whole store over.

Exemptions checked before go-live

Registering locations only helps if the exemption certificates follow them. We needed to check whether a location created through the API would receive the right certificate, so we compared it with one created by hand. The certificate was attached when the location was listed on it. The client saw it load for a newly created location before signing off.

$13 a month to run, three weeks to deliver

The integration runs serverless on Node.js across AWS Lambda, API Gateway, and SQS, and costs about $13 a month for both stores.

Delivery took three weeks and one day of preparation, ten working days of development, and three days of handover.

Accurate tax starts with accurate order data

We connect Shopify B2B with your tax, pricing, and shipping systems, so every order carries the right details and your records stay consistent across platforms.

The result

Every location registered, every rate calculated against the address the goods go to

Every company and location in Shopify B2B now has a matching record in Avalara, with the right address and exemption certificate attached. Tax is calculated per destination state, and new accounts from NetSuite are registered automatically. Astral Brands files returns on complete data, without the audit and penalty risk of the old setup.

495 hours of manual setup avoided

1,486 companies × 20 minutes each - roughly three months of one person's full-time work, never spent.


~$12,000-17,000 of manual work avoided

The same 495 hours valued at the US median pay for accounting and bookkeeping clerks: $24 an hour base, closer to $35 fully loaded (BLS, May 2025).


1,486 wholesale companies migrated

All of them, plus their locations, are registered in Avalara across two B2B stores


From 1 location per company to all of them

Every ship-to address is now visible to AvaTax, not just the head office.


~10 minutes saved per new account

Companies and locations arriving from NetSuite are created in Avalara automatically, with zero manual steps.


~$13 per month to run

Serverless infrastructure for two B2B stores — about $156 a year against a 495-hour manual alternative.


3 weeks from kickoff to delivery

One day of preparation, ten days of development, three days of handover.


Penalty exposure closed

No fines were issued before the fix, but the risk was real: incomplete filings across multiple states, tax charged to exempt resellers, and no way to reconcile Shopify against Avalara.


Accurate tax starts with accurate order data

We connect Shopify B2B with your tax, pricing, and shipping systems, so every order carries the right details and your records stay consistent across platforms.