Bojan Josifoski < founder />

How to Connect Sample Activity to Revenue (Without Guessing)

April 3, 2026 • Bojan

Ask most sales leaders whether their sample program generates revenue, and you will get one of two answers. Either a vague “yes, definitely” backed by nothing, or a frustrated “we have no idea” followed by a description of how data lives in five different places.

Both answers point to the same gap. The activity of sending samples and the outcome of closing deals live in disconnected systems. Bridging that gap is not a reporting problem. It is a data architecture problem. And most teams never solve it because they underestimate what it actually takes.

Why Attribution Is Harder Than It Looks

At the surface level, sample attribution sounds simple. You sent samples. The deal closed. Connect the two and calculate credit. But the reality is full of edge cases that break simple models.

A single deal might involve multiple sample shipments sent over several weeks. Some samples go to the decision maker, some go to a plant manager who was never in the CRM. The deal might close three months after the last sample was delivered. Or it might close for a different product line entirely, with samples playing a supporting role rather than a direct one.

The question “did this sample influence this deal?” is not binary. It requires a linking model that captures relationships between orders and deals, tracks influence type, records timing, and computes credit in a way that reflects reality rather than forcing a clean narrative.

What a Linking Model Requires

The foundation of any attribution system is the link between a sample order and a CRM deal. This sounds like a simple foreign key, but it is not.

First, you need to support multiple links per deal. A deal that received four sample shipments should show all four, not just the most recent one. Each link needs an influence type. Was this the primary sample that initiated the conversation? A follow-up that addressed a specific concern? An inferred connection based on timing and account matching?

Second, the link needs context. When was the order delivered relative to the deal closing? What was the deal stage when the sample was sent? These temporal relationships matter because a sample delivered after a deal closes is not the same as one delivered during evaluation.

Third, you need to handle credit assignment. When a $50,000 deal has three linked sample orders, how do you divide the credit? There is no universally correct answer. Some teams want equal distribution. Others want primary samples to get most of the credit. I have written about attribution models before, and the honest conclusion is that the right model depends on how your sales process works.

The CRM Cannot Do This Alone

CRMs are not built for sample tracking, and they are even less equipped for attribution. Salesforce and HubSpot both understand deals. They both understand contacts and companies. But neither has a native concept of “this operational event influenced this deal outcome.”

To build attribution inside a CRM, you would need custom objects for sample orders, custom fields for delivery dates and influence types, junction objects for many-to-many deal-order relationships, and custom reporting that calculates credited revenue across those relationships. Most teams that try this abandon it within a quarter because the maintenance burden is unsustainable.

The alternative is to build the attribution layer outside the CRM and connect it where the data needs to flow. The operational system manages orders, shipments, and delivery tracking. The CRM manages deals, pipeline, and contacts. The attribution layer sits between them, linking orders to deals and computing credit when deals close.

What the Reporting Needs to Show

Attribution is only useful if it produces reporting that people actually use. In practice, that means answering several distinct questions for different audiences.

For sales leadership: How much revenue was influenced by samples this quarter? Which reps are most effective at using samples in their deals? What is the average time from sample delivery to deal close?

For individual reps: Which of my open deals have linked samples? What is the delivery status of samples I sent last week? Which of my closed deals had sample attribution?

For marketing and operations: Which product samples appear most frequently in won deals? Which customers received samples but never converted? What is the total sample spend against attributed revenue?

Each of these requires a different reporting dimension: by rep, by customer, by sample, by deal, by time period. Building these views on top of CRM data alone is impractical because the source data does not live there. Building them on top of a purpose-built attribution layer is straightforward because the data model was designed to support exactly these queries.

Influence, Not Causation

One important framing choice: attribution in this context is about influence, not causation. No system can definitively prove that a sample caused a deal to close. The buyer had conversations, saw demos, evaluated competitors, and made a decision based on dozens of factors.

What attribution can prove is association. These samples were connected to this deal. They were delivered before the deal closed. The deal is worth this much. That gives leadership a measurable signal about whether the sample program is contributing to revenue, even if it cannot isolate the exact contribution.

This framing matters because it sets honest expectations. Teams that expect attribution to prove ROI with scientific precision will be disappointed. Teams that use it to understand patterns, identify what works, and make better decisions about sample programs will find it valuable.

The Architecture That Works

After building this system, I can describe the architecture that actually works in practice.

The operational layer manages samples, orders, recipients, shipments, and delivery status. It has its own data model, its own interface, and its own permissions. Fulfillment teams work here.

The CRM layer manages contacts, companies, deals, and pipeline. Sales teams work here. The operational system connects to the CRM for contact lookup, address validation, and deal discovery. But it does not try to replicate the CRM’s job.

The attribution layer links orders to deals. It stores influence type, delivery dates, and credit assignments. When a deal closes, it computes attribution based on the configured model and stores snapshots that can be reported on across multiple dimensions.

The reporting layer reads from the attribution snapshots and presents data by rep, by customer, by sample, by deal, and over time. It does not query the CRM in real time. It works from its own data, which is kept in sync through webhooks and periodic reconciliation.

This separation is not overengineering. It is the minimum architecture that supports accurate attribution without creating a maintenance nightmare. Each layer does one job well and connects to the others at well-defined points.

This is the system I built with SampleHQ. If you are trying to connect sample activity to revenue, it might save you the years I spent figuring out the architecture.

About the Author

About the Author

I’m Bojan Josifoski - Co-Founder and the creator of SampleHQ, a multi-tenant SaaS platform for packaging and label manufacturers.

← Back to Blog