Create and manage a private offer
Easily create private offers from Salesforce opportunities using the Suger App within your Salesforce Console, then manage them — extend, cancel, notify contacts, or download the EULA — without leaving Salesforce.
Overview
A private offer is a custom deal you send to a specific buyer through a cloud marketplace — AWS, Azure, or GCP. It includes your negotiated pricing, contract terms, and expiration date. Think of it as sending a quote: once the buyer accepts it, the contract is live and billing starts automatically through the marketplace.
After adding the Suger App to your Salesforce Console, you can create these private offers directly from opportunities — no need to switch to the Suger Console. You can also create Agreement-Based Offers (ABO) from Salesforce. Once an offer has been created, you can manage it from the same Suger Widget on the opportunity — extend the expiry date, cancel it, notify contacts, and download the EULA file.
Prerequisites
- The Suger App must be installed, connected, and set up with the Suger widget on your opportunity pages.
- You need the Suger User, Suger User - Marketplace, or a cloud-specific marketplace permission set assigned to your Salesforce account. If you can’t see the New Offer button on an opportunity, your permission set is likely missing or incorrect — see Permission Sets.
- The product you want to create an offer for must already exist in Suger. If it doesn’t, create it in the Suger Console first before continuing.
Create a private offer
- Navigate to the opportunity’s detail page and click the New Offer dropdown button at the top of the Suger App. If you don’t see the widget, it may not be added to your page layout yet — see Add Suger widgets and buttons to Salesforce pages.
- Locate and click the “Private Offer” button.
-
Choose the product on which the private offer will be based and complete the required fields in the form. Note that the required fields may vary depending on the cloud marketplace and the type of offer.
- The product list shows only the products available in your Suger account.
- If you are assigned a cloud-specific permission set (for example, Suger Marketplace - AWS), you will only see products for that cloud.
- Once all necessary information is filled in, submit the form to create the offer.
- You are all set!
Check a GCP offer before you create it
Three GCP offer kinds get a Validate button in the modal footer, next to Create: a plain GCP private offer, a GCP replacement offer, and a GCP CPPO-Out replacement offer. Nothing else does.
It sends the offer you have filled in to Suger’s validator and shows the verdict right above the buttons, without creating anything:
| Verdict | What it means |
|---|---|
| Checks passed | Nothing in the offer would be rejected. |
| This offer would be rejected | The reasons are listed underneath as bullets, verbatim from the create path. Fix them and validate again. |
While the check runs the button reads Validating…. The verdict is cleared as soon as it might no longer be true — when you change any field, or switch to a different product — so a banner can never describe an offer other than the one on screen.
If the product’s pricing could not be loaded
The AWS, AWS Container, and GCP create forms show a red banner at the top when Suger could not load the selected product’s specification. Submitting is refused with:
Cannot create this offer: the product info could not be loaded. {detail}
A related message appears when the product loaded but has no pricing plans to choose from:
Please select a pricing plan. If the dropdown is empty, this product’s pricing could not be loaded.
Both mean the same thing in practice: pick a different product, or fix the product’s pricing in the Suger Console, then reopen the form. There is no field on the form to correct.
GCP prepay: what happens to unused commitment
A GCP prepay offer’s create form carries an Unused commitment rule selector above the installment schedule, with three choices:
| Rule | What it does |
|---|---|
| Rollover | An installment’s unused balance carries into the next installment. |
| Expire | The unused balance is discarded at the end of the installment — the carried-over commitment and any partner-sponsored free credit. |
| Custom | Set the behaviour installment by installment. |
Once the offer exists, the installment table on the offer detail page shows the resulting rule as a read-only Unused Commitment column, worded exactly as the GCP producer portal words it, so the two can be compared side by side:
- Rollover to next commitment
- Expire all unused balance
- Expire all at offer end date — the final installment, where the term ends and nothing can roll further.
Proration (GCP, monthly billing)
A GCP private offer whose Payment Recurrence is Monthly has a Proration switch in its pricing section:
| Setting | What GCP does |
|---|---|
| Off (the default) | Installments follow the offer’s anniversary date. |
| On | GCP prorates the first installment against the start date, so billing lines up with calendar months. |
The switch appears only for Monthly recurrence, and never when the usage pricing model is Usage-based discount only, which has no commitment installment to prorate.
AWS net payment terms
For an AWS private offer, choose Customer’s net terms with AWS to leave the custom term empty, or choose Net 15, 30, 45, 60, 90, or 120 after agreeing the term with the buyer. The buyer does not choose this value in Suger. Agreement-Based Offers are treated as new offers, so this selection starts empty.
For a CPPO resale authorization, the ISV selects the maximum buyer net payment term. For the downstream CPPO, the channel partner can inherit that maximum or select a shorter term, but cannot select a longer one. If the authorization has no maximum, a custom downstream term is unavailable. Cloning any supported AWS offer or authorization copies its current value into the new-offer form. Released values are read-only.
Configure renewal terms (AWS)
AWS contract offers can carry pre-authorized renewal terms, so the agreement renews on terms the buyer already agreed to instead of requiring a new offer each cycle. When the offer qualifies, a Configure renewal terms section appears on the AWS offer form.
Whether the section appears depends on the product’s commits. It is not a setting you can turn on, and usage dimensions on the same product do not hide it:
| Offer form | The section appears when |
|---|---|
| AWS SaaS | The product carries at least one commit. |
| AWS Container or AMI | The product carries at least one commit, and the offer is priced with commits — not usage-only, and not free. |
| AWS Professional Services | The product carries at least one commit. |
If the offer stops qualifying after you set renewal terms — for example, you switch to a product with no commits — the terms are removed from the offer automatically, so they are never sent to AWS on an offer that cannot carry them.
Pick one of three renewal options:
| Option | What it does |
|---|---|
| No price uplift | Renew at the same price each cycle. |
| Price uplift | Increase pricing by a fixed percentage, or within a pre-negotiated range, each cycle. |
| No renewal | Do not include auto-renewal terms with this offer. |
Choosing Price uplift reveals a Price uplift type:
| Uplift type | Fields |
|---|---|
| Fixed percentage | Price increase percentage — 0 to 100, in steps of 0.01. |
| Percentage range | Minimum uplift percentage and Maximum uplift percentage, each 0 to 100 in steps of 0.01. The final figure inside that range is chosen later, per renewal. |
Once the offer exists, the terms read back as a Renewal terms card on the offer detail page. Managing a renewal after the buyer accepts — adjusting the uplift inside an agreed range, or opting out — happens on the entitlement, not here; see pre-authorized auto-renewal.
Auto-Activation (Azure)
Azure SaaS offers can carry an Auto-Activation toggle — Automatically activate the subscription on purchase:
- On — Azure activates the SaaS subscription automatically once the customer purchases the private offer.
- Off — your team activates the subscription. Suger does not activate it for you on these integrations, because the integration manages subscription activation itself.
The toggle appears only when both are true: the Azure integration is set to self-managed subscription activation, and the offer uses V2 pricing (newCustomizedPlans). V1 offers cannot carry the setting at all, so it is hidden rather than shown disabled.
Attach your own EULA files
When the offer uses your own EULA, the form’s EULA section lists every PDF you attach, and Suger merges them into one document in the order shown. Use the arrows beside each file — Move up in merge order and Move down in merge order — to change its position before you submit.
- If you also tick Attach Standard Contract for … Marketplace, or the checkbox that attaches your public offer’s default EULA, that document is appended last, after your own files.
- On an Agreement-Based Offer that uses Append to Existing EULA, the base agreement’s existing EULA stays first, and the files you upload follow it in the order shown.
- The AWS Reseller and AWS Professional Services forms have no standard contract to attach, so their files merge in the order shown.
Snowflake: attach PDFs for the buyer
A Snowflake private offer has an Attachments section for PDF files the customer can download while viewing the offer — up to 5 files, 5 MB each.
- Click Attach file to add a row, then choose a PDF for it.
- Repeat for up to five files. Attach file disappears once five rows exist, and the trash icon on a row removes it.
A file over 5 MB is refused with The file size is too large., and a file that is not a PDF with The file type is not supported. Once the offer exists, the offer page lists the attached file names under Attachments.
Oracle: when billing starts
An Oracle private offer sets when billing starts in its Billing Start section:
| Option | What happens |
|---|---|
| On acceptance (the default) | Billing starts when the buyer accepts the offer. |
| Specify date | A date field appears, and billing starts on the date you pick. |
Offer Expiration Date — the buyer’s deadline to accept — defaults to 30 days after creation, or to the day before the billing start date if that is sooner. When you specify a start date, the expiration date must fall before it. The form refuses to submit with:
- Billing start date is required when billing starts on a specific date.
- Offer expiration (accept-by) date must be before the billing start date.
What happens next
After you submit the offer:
- Suger creates the offer record in your Salesforce org, linked to the opportunity.
- The offer is sent to the cloud marketplace (AWS, Azure, or GCP) for processing.
- Once the marketplace confirms the offer, the offer status updates and the offer URL becomes available.
- You can then copy the offer URL from the offer record and send it to the buyer — they use it to review and accept the offer in their cloud marketplace account.
Track private offer status
After creating a private offer, you can track its progress directly from the Opportunity page via the embedded Suger widget. All offer and entitlement data synced from the marketplace is displayed in real time within the widget — no need to switch platforms.
- Once you click Create, you’re returned to the Opportunity detail page. The Suger widget immediately displays the new offer with the status
PENDING_CREATE.

-
Wait up to 5 minutes, then refresh the widget. The offer status updates to one of the following:
Create Success— the offer was successfully created in the marketplace but has not yet been sent to the buyer.Pending Acceptance— the offer has been pushed to the marketplace and the buyer has been notified.

Invalid— the marketplace refused the offer before anything was created: its shape, term, or replacement target was rejected pre-flight. Nothing exists on the marketplace side, so the offer is still yours to correct — open it and use Edit Draft. This is distinct fromCreate Failed, where the call to the partner itself failed and may have left something behind.
- When the buyer accepts the offer, the widget updates to show
Accepted, and you’ll see the corresponding Offer object linked within the widget.

- Click the offer directly in the widget to open a detailed view, including pricing, contact information, term details, and entitlement data.
What’s on the offer detail page
Beyond the standard offer fields, the offer detail page shows a few sections only when they apply to that offer. If you don’t see one below, it means the condition for it wasn’t met — not that data is missing.
Buyer payment term (AWS)
AWS offers carry a Buyer payment term row in Offer Information, showing the term as its friendly label (Net 30) rather than its raw duration. On a reseller authorization or CPPO — inbound or outbound — the same row is relabelled Maximum buyer net payment term, because on those the value is the ceiling the ISV set rather than the term the buyer actually gets.
The row is hidden on non-AWS offers, and on an AWS offer where the buyer is using their AWS account default, so it never renders as a bare dash.
Renewal offers (AWS and Azure)
An offer is recognized as renewing an existing agreement on both AWS and Azure — AWS marks it on the offer’s metadata, Azure through the private offer’s customer contract renewal flag. Whichever cloud it came from, the offer reads as a renewal wherever the app shows renewal status.
Replaced Offer ID and Replaced Offer (GCP)
GCP replacement and amendment offers carry two extra rows in Offer Information, so you can trace the new offer back to the one it supersedes:
| Row | What it shows |
|---|---|
| Replaced Offer ID | The marketplace ID of the offer this one replaces. |
| Replaced Offer | A link straight to the replaced offer’s record in Salesforce. |
Both rows appear only on GCP replacement and amendment offers. Replaced Offer is additionally omitted until Suger has resolved the replaced offer into a record it can link to — if you see the ID but not the link, the replaced offer hasn’t synced yet.
GCP dates in Pacific time
GCP’s Producer Portal shows a private offer’s dates on the Pacific clock, and so does the offer page. On a GCP offer, dates read as a Pacific date and time with the PST or PDT label — for example 8/31/2026, 11:45:00 PM PDT — so everyone sees the same value whatever their own timezone.
| Row | What it shows |
|---|---|
| Expire Date | 11:45 PM Pacific on the last day the buyer can accept — the time GCP itself displays. |
| Acceptance Date | When the buyer accepted. |
| Start Date, End Date | GCP only: the offer’s term start and end. Each row is hidden until the offer has that value — a pending offer may have no start yet, and a pay-as-you-go offer has no end. |
Offers on other marketplaces keep showing the date alone.
Universal PAYG discount banner
When a GCP offer was priced with a single discount across all usage rather than per-dimension rates, a banner sits at the top of Offer Information stating the discount — for example, 20% off all usage, captioned Universal PAYG discount. It is there so a reviewer doesn’t read the absence of a per-dimension breakdown as missing pricing.
Dimension Tags (read-only)
If your organization uses dimension tagging to build discounts (see Dimension-tag discounts below), the offer detail page shows the tag configuration the offer was built with, as a read-only Dimension Tags section directly above the pricing section. You cannot edit it here — this is the record of how the offer was priced.
| Cloud | Where it appears |
|---|---|
| AWS | One panel at the offer level, above Usage Dimensions. |
| GCP | One panel at the offer level, above Usage Dimensions. For prepay offers, tag groups are set per payment installment, so you get one panel per installment. |
| Azure | One panel per plan, above Azure Pricing — matching the way Azure offers configure discounts per plan. A plan with no dimensions shows nothing. |
Clone a private offer
You can quickly create a new offer based on an existing one.
- Open the Opportunity that contains the existing offer.
- In the Suger widget, click the offer you want to clone.
- In the top-right corner of the offer view, locate the arrow-down button next to the Refresh icon.
- Click the dropdown and select Clone.
- A new offer form opens with pre-filled details from the original offer. Make any necessary changes and click Create to submit.

GCP replacement offers: term and cancellation
Cloning a GCP offer produces a replacement offer, and its form carries two controls that decide how the new offer relates to the one it replaces.
-
Change Offer Duration — a toggle whose own help text reads: “Off keeps the replaced offer’s end time (coterm). Turn on to set your own term via Offer Duration.”
- Off (the default) — the replacement coterms to the replaced offer: it ends on the same date, and the form shows that date as a read-only Offer End Date.
- On — an Offer Duration field appears and you set the term yourself. Its unit follows the Payment Recurrence you selected.
-
Cancel the existing offer at the publishing of this offer — a checkbox in the Existing offer card. When checked, the original offer is cancelled automatically once the new offer reaches pending acceptance status. This only affects whether the original offer is still visible and acceptable; it does not touch an existing subscription if the buyer had already accepted the original offer.
On a Monthly replacement offer, the Proration switch is shown read-only. GCP does not allow the proration policy to change on an amendment, so the form carries over the replaced offer’s setting: On, Off, or Not set (GCP default) when GCP created the original offer under its own default.
Manage an existing offer
Once a private offer has been created from an opportunity, you can manage it without leaving Salesforce. Open the Opportunity that contains the offer, then click the offer in the Suger Widget to open the Offer Page. From there you can extend the expiry date, cancel the offer, notify contacts, and download the EULA file.
Extend a private offer
Extend is offered only where the marketplace accepts the change, so the action is absent rather than failing:
| Marketplace | Can extend? |
|---|---|
| AWS | Yes — except a resale authorization (CPPO_OUT). AWS rejects any change to a released resale authorization. |
| Azure | Only on V2 / V3 pricing (newCustomizedPlans, saasNewCustomizedPlans, vmSoftwareReservations). Not on V1. |
| Oracle | No — Oracle Marketplace does not support extending an offer’s expiry date. |
| GCP and the rest | Yes. |
The offer must also be in Pending acceptance, Expired, or Update failed. An offer the buyer has already accepted has an agreement behind it, and its expiry date no longer governs anything.
- Open the Opportunity that contains the private offer.
- In the Suger Widget, click the offer you want to extend.
- Click the arrow-down button next to the Refresh icon in the top-right corner.
- Select Extend from the dropdown menu.
- Update the Expiry Date to a new future date, then save.

Cancel a private offer
- Open the Opportunity that contains the private offer.
- In the Suger Widget, click the offer you want to cancel.
- Click the arrow-down button next to the Refresh icon in the top-right corner.
- Select Cancel from the dropdown menu.
- Confirm the cancellation when prompted.

Notify contacts
- Open the Opportunity that contains the private offer.
- In the Suger Widget, click the offer you want to notify contacts about.
- Find the Notification Contacts card on the right side of the Offer Page.
- Click Add Contact.
- Choose the contact(s) you want to notify and confirm.

Whether Suger’s notification email actually goes out is decided by your organization’s email notification settings in the Suger console: it is sent only while Enable Email Notification is on and the Notify offer contacts row is enabled, and the contacts you pick reach it through that row’s Offer Notification Contacts rule. See Notify contacts.
Download the EULA file
- Open the Opportunity that contains the private offer.
- In the Suger Widget, click the offer you want to review.
- Scroll down to the bottom of the Offer Page.
- The EULA file is available in the last section of the Offer Page.

Once an offer is past Draft, clicking its EULA opens the file in a new browser tab. Suger fetches a current download link at the moment you click, rather than reusing the link saved on the offer, which can expire — so allow pop-ups for Salesforce. If the file cannot be opened, an Unable to open EULA message gives the reason: Allow popups for Salesforce, then try again. when the browser blocked the new tab, The EULA download link is unavailable. Please try again. when Suger returned no usable link, or the error Suger reported.
Configure CRM field mapping for private offers
Configuring Salesforce private offer field mapping lets you auto-generate private offer fields from your CRM, so information is pre-populated when sending offers from Salesforce. This saves time and reduces manual entry errors during deal submission. Field mapping is set up in the Suger Console by your Salesforce admin.
- Access the Suger Console — the central hub for managing configurations and settings.
- Navigate to the Settings tab.
- Select the Private Offer setting.
- Create a new configuration.
- Choose the Cloud partner and associated CRM for which you want to configure the field mapping.
- Map Salesforce fields to the fields relevant to private offers. For example, associate offer names with opportunities, the buyer AWS account ID with the corresponding field, and offer expiration dates with the relevant fields.
- Save the configuration.
AWS private offer required fields
| Field Name | Source | Description / Purpose |
|---|---|---|
| Salesforce Opportunity ID | Salesforce Field (Id) | Identifies the Opportunity associated with the offer. Required for linking the private offer to the correct Salesforce record. |
| Renewal Offer Type | Salesforce Field | Indicates whether the offer is new or a renewal. |
| Product ID | Salesforce Field (Suger Product Id) | Maps the Suger product to the AWS listing product ID. Required for AWS to recognize which listing the offer belongs to. |
| Offer Name | Expression: {{ .Name }} - {{ .Account.Name }} | Defines the custom name for the offer as it appears in AWS Marketplace. Usually combines Opportunity and Account names. |
| Buyer AWS Account ID | Salesforce Field | The buyer’s AWS Account ID — needed so AWS can associate and allow that buyer to view and accept the private offer. |
| Contacts | Salesforce Field / Manual Entry | Contact names and emails of people who should be notified when the offer is ready. Can include the Opportunity owner and additional internal contacts (for example, {{ .Owner.Name }}, {{ .Owner.Email }}, or manually added users like your teammate). |
| EULA Type | Salesforce Field | Specifies which End User License Agreement (EULA) to attach — for example, “Standard AWS Terms” or a custom EULA. |
| Offer Expiry Date | Salesforce Field | The date before which the offer must be accepted, or it expires (format: YYYY-MM-DD). |
| Offer End Date | Salesforce Field | The date when the offer will officially end or expire (format: YYYY-MM-DD). |
| Start Date | Salesforce Field | The start date for the offer (by default, the acceptance date). |
| Script (Optional) | Custom Script | Used to fill any remaining fields not mapped above. Optional but useful for automation or custom rules. |
Troubleshooting
| Issue | Possible cause | Resolution |
|---|---|---|
| No New Offer button visible on the opportunity | Suger permission set not assigned, or the Suger widget is not on the page | Check your permission set assignment, and add the widget if it’s missing. |
| Product list is empty | No products have been set up in Suger, or your permission set restricts which clouds you can see | Confirm that products exist in the Suger Console. A cloud-specific permission set only shows products for that cloud. |
| Form fields are blank — not pre-filled from the opportunity | Field mapping has not been configured | Field mapping is an optional admin setup. Contact your Salesforce admin to configure it. |
| Copy Offer URL button does nothing after the offer is created | The marketplace hasn’t finished processing the offer yet | Wait 3–5 minutes, then refresh the page. The URL appears once the marketplace confirms the offer. |
| Offer was created but doesn’t appear on the opportunity | Sync between Suger and Salesforce is delayed | Offer records sync on a schedule. Refresh after a few minutes. If it still doesn’t appear, check the Suger Console to confirm the offer was created successfully. |
| Unable to open EULA when you click an offer’s EULA | The browser blocked the tab the EULA opens in, or Suger could not return a current download link | For Allow popups for Salesforce, then try again., allow pop-ups for your Salesforce domain and click the EULA again. For The EULA download link is unavailable. Please try again., try again in a moment, and contact support@suger.io if it keeps failing. |
| Invalid offer — Could not determine the offer being replaced. Reload the entitlement and try again. — when you create a GCP replacement (amendment) offer | Suger could not tell which GCP offer the new one replaces: neither the entitlement nor its offer names it | Reload the entitlement and create the replacement again. If the message persists, contact support@suger.io. |
Frequently asked questions
Can I create offers for AWS, Azure, and GCP from the same place?
Yes — as long as you have products set up for each cloud in Suger and the right permission set assigned. The product selector in the offer form shows products across all clouds you have access to.
Can I create an Agreement-Based Offer (ABO) from Salesforce?
Yes. Agreement-Based Offers are supported from Salesforce — you don’t need to use the Suger Console for this.
What is field mapping and do I need it?
Field mapping is an optional configuration that automatically pre-fills offer form fields with data from the Salesforce opportunity — like buyer name, contract value, or close date. Your Salesforce admin sets this up. You can still create offers without it, but you’ll need to fill in all fields manually.
The offer was created successfully but the buyer can’t find the link. What do I do?
Open the offer record in Salesforce and click Copy Offer URL, then send that link directly to the buyer. Make sure at least 3–5 minutes have passed since the offer was created, otherwise the URL may not be available yet.
Will the offer show up in the Suger Console too?
Yes. Any offer created from Salesforce is also visible in the Suger Console under your offers list.
Dimension-tag discounts (GCP, AWS, Azure)
When your organization has dimension tagging enabled (configured in the Suger web console), the discount step of a private offer shows a tag-based discount panel in place of the per-dimension rate table, for GCP, AWS, and Azure offers:
- Build a rule from tag conditions (e.g.
regioncontainsus-east) and apply one discount to every matching dimension at once. - Apply a saved discount group from your org library, then set its discount %.
- Override individual dimensions, and set a default for everything untagged.
- The dimension list is searchable and paginated, so it stays responsive even for products with many dimensions.
GCP amendment (replacement) offers. Tag-based discounts are no longer limited to new offers. A GCP amendment offer priced postpay shows the same tag-discount panel, and reopening one re-applies the tag rules that were saved with it rather than flattening them back to per-dimension rates.
Configuration rule library. The discount panel has a rule library modal for reusing rules already saved in your org: select rules individually or with a select-all control, and a rule already applied to this offer carries an Applied badge so you do not add it twice.
Percent vs. Absolute pricing (AWS & Azure)
AWS and Azure offers can price a dimension either as a percentage off the product list rate or as an absolute negotiated price. A Percent / Absolute toggle switches between the two faces without losing the entered values:
- Percent — the tag-filter discount panel; the final rate is
list × (1 − discount%). - Absolute — a flat fixed-price editor; you enter the negotiated price directly and the panel shows the equivalent discount for reference.
When you reopen a hand-priced (legacy) offer whose rates differ from the current product list, it opens in Absolute so your negotiated prices are preserved exactly.
Azure per-plan configuration
Azure offers configure discounts per plan: each absolute-priced plan gets its own collapsible section, so plans that share a meter can be discounted independently, and a single offer can mix percentage plans with absolute plans.
For GCP prepay offers with multiple installments, each editable installment is configured independently; already-charged (locked) installments are shown read-only and are never changed.
Dimension tagging does not apply to AWS Machine Learning, AWS Professional Service, AWS Reseller, or Azure Application / Virtual Machine offers — those keep their standard pricing.
Any user who can create an offer can also save a rule as a reusable discount group to the org library. Applying discounts to the current offer never requires saving a group.
Spotted something wrong or out of date on this page? Tell us and we'll correct it.