Skip to content

Offers & Providers

What Is an Offer?

An offer is a financial product available for creators to promote. Examples: SoFi personal loans, QuickBooks accounting software, Deel international payments, a credit card from a major bank. → DB: Offer table (name, brand, category, description, slug)

Each offer has a name, a category, and configuration for how affiliate links are generated and how traffic is routed.

Data Sources

The data source of an offer determines how affiliate links are created for it. → DB: OfferProvider.dataSource

There are several types:

Custom The system automatically fills in the creator's unique slug into a URL template. For example, if the template is https://example.com/referral?ref={slug}, a creator with slug caleb gets https://example.com/referral?ref=caleb. No manual steps required. → DB: OfferProvider.affiliateUrlTemplate — stores the URL pattern with {slug} placeholder

Manual The creator's affiliate URL is unique and can't be auto-generated — it must be obtained from the advertiser and entered by an admin manually. When an admin approves a creator for a manual offer, they paste in that creator's specific URL at the time of approval. → DB: The pasted URL is stored in GeneratedLink.link (created via the OfferApproval approval flow)

RedVentures / Money.com / Bankrate These are financial content networks. Links are generated by appending the creator's slug to a base URL managed by the network. The platform handles this automatically. → DB: OfferProvider.baseUrl — the network base URL

QuinnStreet Similar to the above networks but with a different URL structure. Handled automatically. → DB: OfferProvider.baseUrl, OfferProvider.loanPurpose

Impact Impact is a major affiliate marketing platform. When setting up an Impact offer, an admin selects a specific advertising campaign and ad unit from Impact's system. The platform then uses Impact's API to generate a tracking link for each creator. → DB: OfferProvider.configJson — stores { campaignId, adId }

PartnerStack PartnerStack is another affiliate network focused on software companies (QuickBooks, Deel, Gusto, etc.). When setting up a PartnerStack offer, an admin provides the partner company's identifier. The platform uses PartnerStack's API to generate a unique link per creator. → DB: OfferProvider.configJson — stores { partnershipKey, dest, destinationGateKey }

Providers

A provider is one specific affiliate network or partner that handles a portion of the traffic for an offer. An offer can have one provider or multiple.

Each provider has:

  • A data source type (see above)
  • The configuration needed for that source (URL template, Impact campaign details, PartnerStack company ID, etc.)
  • A weight — what percentage of traffic this provider receives → DB: OfferProvider.defaultWeight
  • An active flag — inactive providers are excluded from routing and weight validation → DB: OfferProvider.active

Traffic Splitting (Weights)

When an offer has multiple providers, traffic is divided between them by weight. For example, if an offer has two providers weighted 70% and 30%, 70% of clicks go to provider A and 30% to provider B.

Weights must always add up to 100%. The admin panel enforces this — you can't save changes if the total is off. → DB: Validates that the sum of OfferProvider.defaultWeight where active = true equals 100

Per-creator overrides: In the Split tab of the offer editor, admins can set custom weight splits for individual creators. A creator's custom split overrides the offer's default split. This is useful when a creator has a special arrangement with one particular provider. → DB: CreatorWeights (userId, offerId, weightsJson) — weightsJson is an array of { providerId, weight }

Approval Types

Each offer has an approval type that controls how creators access it. → DB: Offer.approvalType (values: none, standard, approval_required)

None (Auto-approve) Any creator can generate a link immediately. No approval step.

Standard The creator submits a request. An admin reviews it and approves or rejects. Once approved, the creator can generate their link. → DB: Creates a row in OfferApproval (userId, offerId, status = 'pending')

Manual Same as Standard, but the admin must also provide the creator's specific affiliate URL at the time of approval. Used for offers where links can't be auto-generated. → DB: Creates a row in OfferApproval (userId, offerId, status = 'pending'); on approval, creates GeneratedLink (affiliateLinkId, providerId, dataSource, link)

Offer Allowlist

Some offers are restricted to specific creators. An allowlist limits who can see and request the offer. Creators not on the list won't see the offer on their dashboard at all. → DB: OfferAllowlist (offerId, userId) — one row per creator granted access

If no allowlist is set, the offer is visible to all creators. → DB: Controlled by Offer.visibility ("public" / "private")