Skip to main content

Express Private Offers (EPO) and Tackle

Written by Michael Crane

Express Private Offers (EPO) is a capability AWS Marketplace launched at re:Invent in 2025 that lets you turn your standard private offer pricing into a self-service, always-on flow for buyers. This guide covers what EPO is, whether it's a good fit for your product, and how to connect it to your existing Tackle and Salesforce workflows so accepted EPO deals and EPO-routed co-sells show up where your team already works.

1. What EPO is

Today, when a buyer wants a private offer, they either negotiate directly with your sales team or click "Request Private Offer" and wait for someone on your side to build one. EPO adds a third path. You configure a rate card in AWS Partner Central on your marketplace product listing once: base pricing, discount tiers, contract duration options, and a maximum deal size and discount percentage you're comfortable automating. From then on, a buyer on your product listing can click "Get express private offer," answer a short set of AI-guided questions about what they want to buy, and one of two things happens:

  • If they qualify under your rate card, AWS generates a private offer automatically and delivers it to the buyer in minutes.

  • If the deal exceeds your maximum contract value, fails a qualification rule, or falls outside what you've configured, the buyer is routed to your sales team instead through the existing request a private offer process.

EPO is available for SaaS Contract and SaaS Contract with Consumption Pricing products. Pay-as-you-go-only listings aren't supported. EPO doesn't replace your existing public offer or private offer workflows, it runs alongside them.

2. Why it matters

Even before you connect it to Tackle, EPO changes how a sales team operates on Marketplace.

  • Automate the standard deals that don't need a person. When a deal is repeatable and inside your guardrails, a rep hand-building the offer adds no value. EPO handles those automatically, so a person only steps in when the deal actually needs judgment.

  • Scale without adding headcount. After a one-time rate card setup, EPO processes every qualifying deal on its own. So, deal volume can grow without a matching increase in sales or deal-desk effort.

  • Free your reps for the deals that need them. With standard transactions handled automatically, sales time goes to the complex, high-value opportunities where a person actually changes the outcome.

  • Capture demand you'd otherwise lose. A qualified buyer gets a tailored private offer in minutes, any time of day, with little or no follow-up, instead of waiting days or weeks for someone to scope and build a quote.

  • Protect your pricing. Rate cards apply the same discount logic to every qualifying deal, instead of leaving it to each rep in the moment. That keeps ad-hoc discounting from quietly eroding your margin.

  • Get surfaced by AWS. Enabling EPO adds you to the AWS co-sell workflow with no extra setup and signals transaction-readiness to AWS's internal AI-powered recommendation engine. An "EPO Enabled" badge sets your listing apart, and when an AWS rep finds your solution for a customer, they can send an EPO invitation directly. Revenue credit for Marketplace and co-sell is unchanged.

Every one of those benefits plays out up to the point a buyer accepts an offer. They stop there. An EPO deal that gets accepted still needs to land in your CRM, get assigned to the right owner, and turn into a provisioned account, exactly like any other Marketplace deal. If that handoff is manual, the speed advantage on the front end gets lost on the back end. Section 6 of this guide is about closing that gap using Tackle and Salesforce Flow Builder. So, an accepted EPO deal or an EPO-routed co-sell shows up in Salesforce automatically instead of waiting for someone to notice it.

3. Is EPO a good fit for your product?

Not every product benefits from EPO on day one. Use the criteria below to decide.

Product requirements

  • Active SaaS Contract or SaaS Contract with Consumption Pricing listing on AWS Marketplace

  • The "Request Private Offer" button is already enabled on your listing

  • Pricing dimensions that are clear and standardized (seats, users, tiers, storage) rather than fully bespoke per deal

Organizational readiness

  • A defined rate card or standardized pricing tiers, even if informal today

  • Deal desk or revenue ops alignment on what discount and deal-size boundaries are safe to automate

  • Sales leadership agreement on what counts as a "standard" deal (automate) versus a "strategic" deal (stays human-led)

  • Ability to name a maximum total contract value (TCV) and maximum discount percentage you're comfortable with

Best fit

Characteristic

Why it matters

High volume of inbound pricing inquiries

EPO absorbs the repetitive ones so sales isn't the bottleneck

Predictable, tiered pricing

Maps directly to a rate card

Long sales cycles for deals that shouldn't need one

Standard renewals and small upgrades are the clearest win

Existing PLG or self-serve motion on Marketplace

Buyers are already finding you without a rep in the loop

Global buyer base

EPO runs 24/7, so it captures demand outside your team's hours

Two patterns tend to fit especially well: high-volume SMB renewal books, where a rep-negotiated private offer is overkill for a small, repeatable renewal, and free-trial-to-paid conversion for PLG products, where a qualified trial user can move straight to a paid subscription without a sales conversation. If your product looks like either of those, EPO is worth configuring.

Not a fit yet

  • Entirely bespoke pricing with no standardizable portion

  • Products that need extensive pre-sales technical validation before you can quote a price

  • No internal deal desk or clear pricing authority to set the guardrails

  • Products that require manual license provisioning and no other way to capture buyer contact info (Tackle hosted registration can help)

  • Pay-as-you-go-only pricing (not supported by EPO's rate card model)

4. Set up your rate card in AWS Partner Central

Before anything reaches Tackle, you configure EPO in AWS Partner Central. AWS's documentation covers how the three-phase workflow works: rate card setup, the buyer's request process, and how AWS decides whether to generate an offer automatically or send the buyer to your sales team.

Here's what you'll actually be asked to fill in.

Dimensions

  • Choose which of your listing's dimensions are eligible for EPO. These can be public or private dimensions.

  • Each dimension needs a description of at least 250 characters. AWS shows this to buyers to help them pick the right option. So, write it for a buyer, not an engineer.

Base price and contract terms

  • A base price is required (monthly).

  • Minimum and maximum contract duration, in months.

  • How many days an offer stays open before it expires if the buyer doesn't accept.

  • Optionally, how many days into the future a buyer can choose to start the agreement.

  • An EULA. You can only use the EULA already on your public listing or the AWS Standard Contract, you can't attach a custom one here.

Discounting

  • Maximum discount percentage. 0% is allowed, which is how you automate offer generation at list price without discounting anything.

  • Maximum total contract value (TCV) you're willing to automate. AWS caps this below $1M regardless of what you'd otherwise allow.

  • Pick a discount strategy:

    • Per-dimension: up to 5 tiers per dimension, each with a minimum quantity, maximum quantity, and discount percentage.

    • TCV-based: up to 10 tiers, each with a minimum deal value, maximum deal value, and discount percentage.

    • Buyer-profile based: instead of tiers, you write qualifying criteria in plain language (industry, use case, or a custom category), up to 5 of them, and AWS turns that into a short questionnaire buyers answer. You can combine this with either tiered strategy above, but per-dimension and TCV-based can't be combined with each other.

Once this is live, buyers start seeing "Get Express Private Offer" on your listing, and the two paths in Section 6 start producing contracts and co-sells for Tackle to pick up.

5. How EPO works with Tackle

Most private offers have a sales rep behind them. By the time the buyer accepts, there's an Opportunity in Salesforce and someone who owns the deal. An accepted Express Private Offer has neither, just like any PLG or public purchase. No sales rep worked it. So, nothing is captured in your CRM on its own.

As a result, that is where the problems start. The buyer has subscribed and expects to be onboarded. Once the buyer pays, finance sees an AWS disbursement it can't tie to any existing deal. The renewal at the end of the term has no owner. None of it surfaces until someone thinks to open AWS Partner Central and manually create the data in your CRM. A deal that closed in minutes on the buyer's side sits unseen on yours for days.

Tackle already ingests the data from these deals. So, closing the gap in your CRM is easy and requires no new integration. Turning them into Salesforce records is as simple as building a flow in Flow Builder without the need for any engineering project!

A buyer EPO request can produce one of two outcomes, and Tackle handles each one differently.

Path A: the buyer qualifies and accepts. AWS generates the offer, the buyer accepts, and it becomes a standard Marketplace agreement. Tackle ingests it as a Tackle Contract, same as any accepted offer. So, by following the Path A steps in Section 6 an Account and Opportunity will be created automatically in Salesforce directly from the contract. This is the same automation Tackle enables for PLG and public contracts today. So, if you already have that set up, EPO is that flow with different filters.

Path B: the buyer doesn't qualify. If the deal is too large, fails a qualification rule, or falls outside your rate card, AWS doesn't drop the request. Instead, they send you an Amazon-Originated (AO) co-sell, the same way they hand you any other lead because there is a buyer who wants your product but needs a real conversation. Tackle ingests it as a Tackle AWS Co-sell Opportunity, same as any inbound co-sell. So, by following the Path B steps in Section 6 a Lead will be created automatically from the co-sell, and once that Lead converts to an Opportunity, the co-sell links to it. This is the same automation Tackle enables for AWS co-sells today. So, if you already have that set up, EPO co-sells flow in with no changes at all.

Either way, the offer lands in Salesforce on its own. The buyer gets an owner, finance can tie the AWS disbursement to a real record, and no one has to reconcile Partner Central against the CRM by hand.

6. Set up Salesforce automation for EPO

Path A creates Salesforce records directly and doesn't reuse an existing flow, see its own intro below for why. Path B reuses Tackle's existing AWS co-sell automation guide (linked in Resources) completely unchanged. There's no EPO-specific condition to add, because AWS doesn't yet give us a way to tell an EPO-routed co-sell apart from any other Amazon-Originated one. If you've already built that co-sell flow for other purposes, there's nothing left to do for Path B.

Prerequisites:

  • Salesforce Admin access to set up fields, mappings, and flows

  • A Salesforce account and access to Flow Builder

  • Tackle for Salesforce installed and connected

Path A: Automate from accepted EPO contracts

Unlike a rep-created private offer, an EPO contract has no Salesforce Opportunity waiting for it, since no rep ever worked the deal. So instead of creating a Lead and waiting for someone to convert it, this flow creates the Account and Opportunity directly, then links the contract to the Opportunity it just created, in one pass. This mirrors the flow Tackle actually built and ran for its own PLG contracts, not the Lead-based pattern used elsewhere.

Configure the trigger:

  1. In Salesforce, click the gear icon to open the Setup menu, then click Setup.

  2. Search for "Flows" and select Flows.

  3. Click New Flow.

  4. Click Categories > Triggered Automations.

  5. Click Record-Triggered Flow.

  6. For Object, search and select Tackle Contract. Configure Trigger automatically selects A record is created.

  7. For Set Entry Conditions, select All Conditions Are Met (AND) and add the three conditions below.

Field

Operator

Value

Status

Equals

Active

Offer Type

Equals

private

Offer Name

Contains

express private offer

Status and Offer Type together identify an accepted, private-offer contract. Offer Name narrows that down to EPO specifically, using the naming convention AWS confirms in their public documentation.

Build the actions:

  1. Under Optimize Flow, select Actions and Related Records, then toggle Add Asynchronous Path on.

  2. Leave the Run Immediately path empty, ending right away, everything below happens in the Run Asynchronously path.

  3. In the Run Asynchronously path, click + and add a Create Records element.

  4. For Label, type "Create Account." Set How to set record field values to Manually. For Create Records of This Object > Object, select Account.

  5. Set the Account Name field to Triggering Tackle Contract > Company Name. Add any other Account fields your org wants populated at this point.

  6. Turn on Check for Matching Records. Set Condition Requirements to All Conditions Are Met (AND), with a condition matching Account Name Equals Triggering Tackle Contract > Company Name. Set If a single matching record exists to Update the matching record, and If multiple matching records exist to Update the most recently modified matching record. This prevents creating a duplicate Account if one already exists under that company name, for example if this buyer already has other Marketplace contracts with you.

  7. Click + below that and add a second Create Records element.

  8. For Label, type "Create Opportunity." For Object, select Opportunity.

  9. Set field values for the Opportunity: Account ID to the Account created in the previous step, Close Date to Triggering Tackle Contract > Accepted Date, Name to a text template combining Triggering Tackle Contract > Company Name with a suffix like "EPO on AWS Marketplace" (adjust the wording to your own convention), and Stage to whichever entry-level stage your pipeline uses for a newly-identified deal (Tackle's own flow uses a stage called Discover). Leave Check for Matching Records off for the Opportunity, unlike the Account step above, so every accepted EPO contract gets its own Opportunity instead of updating an existing one.

  10. Click + and add a Link Contracts To Opportunities element.

  11. For Label, type "Link Tackle Contracts to Opportunity." Set Opportunity Id to the Opportunity created in the previous step, and Tackle Contract Id to Triggering Tackle Contract > Record ID.

  12. Click Save.

  13. Give the flow a label, for example "Create Account and Opportunity from EPO Contract," and click Save.

  14. Click Activate. You'll see a green success message once it's live.

Path B: Automate from an EPO-routed co-sell (AO)

Step 1: Create a Tackle Co-sell field on the Lead object and an AWS Referral lead source. Skip this if you've already set these up for another workflow.

Create the field:

  1. In Salesforce, go to Settings and click Setup.

  2. Search for and click Object Manager.

  3. Search for and click Lead.

  4. Click Field & Relationships, then New.

  5. Select Lookup Relationship, click Next.

  6. For Related To, select Tackle AWS Co-sell Opportunity, click Next.

  7. Keep the default Field Label, Field Name, and Child Relationship Name, click Next.

  8. Select Visible for all items if not already selected, click Next.

  9. Select Lead Layout if not already selected, click Next.

  10. Select Tackle AWS Co-sell Opportunity Layout and the checkbox if not already selected, click Save.

Add the Lead Source value:

  1. In Object Manager, go to Lead > Field & Relationships.

  2. Search for and click Lead Source.

  3. Under picklist values, click New.

  4. Add the value AWS Referral, then click Save.

Step 2: Build the flow that creates a Lead from an inbound co-sell.

  1. In Salesforce, go to Settings > Setup.

  2. Search for "Flows" and select Flows: Process Automation.

  3. Click New Flow, then Categories > Triggered, then Record-Triggered Flow.

  4. For Object, select Tackle AWS Co-sell Opportunity. Trigger automatically selects A record is created.

  5. For Set Entry Conditions, select All Conditions Are Met (AND) and add: Origin Equals AWS Referral. Keep the Optimize Flow defaults.

  6. Click + Add scheduled paths (Optional). This staggers Lead creation from contact creation so both don't process at once.

  7. In the scheduled path, click + and add a Get Records element. For Label, enter "Get Tackle AWS Co-sell Contact." For Object, select Tackle AWS Co-sell Contact.

  8. Add conditions (All Conditions Are Met): Detail Type Equals Customer Contact (or, if you want the AWS rep's contact instead, Detail Type Equals Cloud Team Member and Business Title Equals AWS Sales Rep), and Tackle AWS Co-sell Opportunity Equals the triggering record's ID.

  9. Click + and add a Create Records element. For Label, enter "Create Lead." For Object, select Lead.

  10. Set field values: Company to the triggering co-sell's Customer Company Name, Last Name to the contact's Last Name, First Name to the contact's First Name, Lead Source to AWS Referral, Email to the contact's Email, Website to the triggering co-sell's Customer Website, and Tackle AWS Co-sell Opportunity to the triggering record's ID.

  11. Click Save, label the flow (for example "Create Lead from Tackle Inbound"), click Save again, then Activate.

Step 3: Build the flow that links the co-sell to the Opportunity.

  1. In Salesforce, go to Settings > Setup, then Flows: Process Automation, then New Flow, then Triggered, then Record-Triggered Flow.

  2. For Object, select Opportunity. Trigger automatically selects A record is created. For Entry Conditions, select None.

  3. Under Optimize Flow, select Actions and related records and toggle Add Asynchronous Path on.

  4. Click + and add a Get Records element. For Label, enter "Get Lead." For Object, select Lead.

  5. Add conditions (All Conditions Are Met): Converted Opportunity ID Equals Triggering Opportunity > Opportunity ID, and Tackle AWS Co-sell Opportunity Is Null with Value False.

  6. Click + and add a Decision element. For Label, enter "Tackle Co-sell Lead Exists."

  7. Add a new outcome labeled "Yes," with Resource set to Lead from Get Lead > Lead ID, Operator set to Is Null, and Value set to False. Rename the Default Outcome to "No."

  8. Under Yes, click + and add a Link Opportunities element. For Label, type "Link Tackle Co-sell to Opportunity." Set Record Id to Triggering Opportunity > Opportunity ID, and Tackle Cosell Id to Get Lead > Tackle AWS Co-sell Opportunity.

  9. Click Save, label the flow (for example "Link Co-sell to Opportunity on Lead Conversion"), Save, then Activate.

Don't also turn on Tackle's built-in Auto-Create co-sell toggle in Account Settings > Co-Sell if you build these flows. Running both at once can create duplicate co-sell records.

Have more questions? See our FAQs.

Resources

Section 6's Path B steps are adapted from the co-sell automation guide below. The public contract linking guide is still useful background on how Tackle handles contracts with no existing Salesforce record, even though Path A's actual flow differs from it. If Tackle updates either guide after this document is published, check back here for anything that's changed.

Did this answer your question?