Sending a client a gift sounds simple until you try to do it at scale. A loan officer closes a deal, wants to send a welcome package, and suddenly you’re looking at a manual process: log into a separate storefront, look up the client’s address, pick the items, place the order, then go back to HubSpot and hope someone remembers to note that a gift was sent. Multiply that across dozens of loan officers and hundreds of clients, and things start falling through the cracks.
We recently built a solution for a financial services client that eliminates all of that. Loan officers can now send gifts directly from HubSpot—either manually from a contact record or automatically through workflows—with real-time inventory checks, full order tracking, and a complete audit trail. Every gift is fulfilled through Culture Shock, a swag and fulfillment platform that handles warehousing, inventory, and shipping.
The Problem: Too Many Steps, No Visibility
The client’s loan officers wanted to send branded gifts to new clients—welcome packages, thank-you items after closing, that kind of thing. Culture Shock handles the physical fulfillment—warehousing, picking, packing, shipping—but there was no connection between HubSpot (where the client relationships live) and Culture Shock (where the inventory and shipping live).
The process was entirely manual. Someone would have to check what’s in stock, figure out the client’s shipping address, place an order through a separate system, and then manually update HubSpot so the rest of the team knew a gift had been sent. There was no way to know at a glance whether a client had already received a gift, no way to trigger gifts automatically based on deal stages, and no way to track what was shipped.
The Solution: Connecting HubSpot to Culture Shock
We built two paths for sending gifts, both powered by a Cloudflare Worker that sits between HubSpot and the Culture Shock API.
The first is a CRM card that lives directly on the contact record. A loan officer opens a contact, picks one or more items from a dropdown that shows live Culture Shock inventory with stock counts, confirms the shipping address (which they can edit right there), and hits send. The order goes to Culture Shock, a Gift Log record is created in HubSpot, the contact’s properties are updated, and a detailed note appears on the timeline. The whole thing takes about ten seconds.
The second is a custom workflow action called “Send & Log Culture Shock Gift.” It shows up in the HubSpot workflow editor like any other action. You configure which items to send using a multi-select dropdown populated in real time from Culture Shock inventory, choose what happens if something is out of stock, and let the workflow handle the rest. The action returns output fields—order status, items sent, out-of-stock items, recipient name, shipping address—that you can branch on and use in notification emails.
For example, a typical workflow might trigger when a deal moves to “Closed Won,” send a welcome gift package, then branch: if everything shipped successfully, email the loan officer a confirmation. If items were out of stock, notify the ops team. If the contact’s address was missing, create a task for the loan officer to update it. All automatic.
The Technical Bits
For the infrastructure nerds: we’re running on Cloudflare Workers with Hono as the router. The Worker handles six API routes—inventory listing, inventory check, order creation, order status, a Culture Shock webhook consumer, and the workflow action endpoint. It also serves a dynamic options endpoint that HubSpot calls to populate the item dropdown in the workflow editor with live inventory data.
Every order goes through a deduplication guard backed by Cloudflare KV. Before placing an order with Culture Shock, the Worker checks whether the same items were already sent to the same contact within a configurable window. This prevents double-sends from workflow re-enrollments, accidental clicks, or system retries. The key expires automatically—no cleanup needed.
The Culture Shock API is straightforward but has a critical constraint: order creation is not idempotent. You can’t safely retry a failed order call because you might end up shipping two packages. So we never retry writes. If the order call fails, we log a failed Gift Log record in HubSpot and surface the error through the workflow’s output fields. Reads—inventory checks, order status—get retried with exponential backoff.
HubSpot’s UI Extensions run on platform version 2025.2, which means no serverless functions. The CRM card calls the Worker directly through HubSpot’s fetch proxy, with the Worker URL whitelisted in the app’s permitted URLs configuration. The workflow action uses the Automation Extensions API, which sends callbacks to the Worker when a workflow fires.
Everything Logged, Everything Linked
Every gift attempt—successful or not—creates a Gift Log custom object record in HubSpot, associated to the contact. The record includes the items ordered, the Culture Shock order number, the order status, who requested it, and when. Failed orders include the error detail so someone can diagnose what went wrong.
The contact’s timeline gets a rich HTML note with the full order details: recipient, shipping address, itemized list with SKUs, and a direct link back to the Gift Log record. Contact-level properties track the last gift date, total gift orders sent, and last shipped date for easy reporting and list building.
When Culture Shock ships an order, they send a webhook back to the Worker with tracking information. The Worker updates the Gift Log record with the tracking number and status, adds another timeline note, and updates the contact’s shipped date. A HubSpot workflow can trigger on that status change to send a shipping notification to the loan officer or the client.
Results
After deploying to the sandbox environment:
- Gift ordering went from a multi-step manual process to a single click from the contact record, or fully automatic through workflows.
- Inventory is checked in real time against Culture Shock before every order. No more sending gifts that are out of stock.
- Every gift has a full audit trail in HubSpot—who sent it, when, what items, what status—linked directly to the contact.
- The workflow action gives complete control over error handling through output fields and branching. Out of stock? Missing address? Duplicate? Each scenario routes to the right team with the right information.
- Duplicate prevention stops double-sends before they happen, without anyone having to remember to check.
Wrapping Up
The gap between “we want to send clients gifts” and “we have a reliable, trackable, automated gift fulfillment process” is bigger than most people expect. Manual processes work when you’re sending a few gifts a month, but they break down fast as volume grows. Connecting HubSpot directly to Culture Shock—with real-time inventory, automated workflows, and full logging—turns gifting from a chore into a system.
The build was straightforward because the pieces fit together well. HubSpot’s workflow actions and UI extensions give you real hooks into the CRM. Culture Shock has a clean fulfillment API. Cloudflare Workers handle the glue with essentially zero latency. The hardest part was getting the HubSpot platform details right—which SDK version supports what, how the fetch proxy works, the exact format for custom object associations—but once that’s sorted, it just works.
Looking to connect HubSpot with a fulfillment platform like Culture Shock, an inventory system, or any external API? Need custom workflow actions that do more than what’s built in? We build integrations that keep your business systems working together. Contact us to discuss your project.