How Does DoPricer CPQ Work with HubSpot?
A technical guide to DoPricer's integration with your HubSpot portal — from installation to pricing a line item
Overview
DoPricer CPQ is a HubSpot Marketplace App that sits alongside your HubSpot portal and automatically applies the correct price and discount to every new line item created in your Deals and Quotes. It does this in the background, without any action required from your sales reps — they add a product, save, wait a few seconds, press browser refresh, and the correct price is already there.
This article explains exactly how that integration works: how DoPricer connects to HubSpot, what it listens for, what it does when it detects a new line item, and what it leaves behind in your HubSpot data.
How DoPricer connects to HubSpot
DoPricer integrates with HubSpot using two standard HubSpot mechanisms: webhooks and the HubSpot API.
Webhooks
A webhook is an automatic notification that HubSpot sends to DoPricer whenever something happens in your portal. DoPricer listens for two webhook event types:
1. New line item created — the primary trigger. Fires whenever any new line item is created anywhere in your portal.
2. Line item price property updated — used exclusively by the Price Lock feature (see below).
HubSpot sends these webhooks to DoPricer's API endpoint automatically. There is no polling or scheduled checking — DoPricer reacts in real time as events occur.
HubSpot API
Once DoPricer receives a webhook, it uses the HubSpot API to fetch additional data it needs — the parent Deal or Quote, the associated Company, and the product from your product library. It then uses the API again to write the updated price and discount back to the line item.
Each new line item typically requires approximately 14 API calls to process fully. HubSpot enforces a rate limit of approximately 110 API calls per 10 seconds per portal, which means DoPricer can process approximately 7– 8 line items per second. On deals with many line items, there may be a brief delay before all prices are updated.
What DoPricer installs in your HubSpot portal
When DoPricer is installed, it creates a set of custom properties in your HubSpot portal. These properties are the mechanism through which DoPricer reads your pricing rules and records its decisions.
All properties are created in a HubSpot property group called "DoPricer", except for custom price list properties on the Product object, which are created in a group called "Price".
Properties created on the Company object
These are set by you (or your HubDo Support contact) to configure pricing rules for each buyer Company.
| Property | Internal name | Type | Purpose |
|
DoPricer Enabled |
dopricer_enabled | Dropdown |
On/Off switch for DoPricer at Company level. If Off or empty, DoPricer takes no pricing action for this Company. |
| Discount By Product Items | dopricer_discount_items | Text | Per-SKU discount rules. Format: SKU=discount% pairs separated by commas, e.g. ABC123=10,ABC124=20. Highest‑priority discount source. |
| Discount Default | dopricer_discount_default | Number | Fallback discount % applied when no SKU or category match is found. |
| DoPricer Pricelist | dopricer_pricelist | Dropdown (single-select) | Specifies which price list applies to this Company. One price list per Company at a time (see Multi-currency support below). Created by HubDo Support on request. |
| Product category discount properties | dopricer_discount_cat_[category] | Number (one per category) | One property per product category — holds the discount % this Company receives for products in that category. Created by HubDo Support when category discounts are configured. |
Properties created on the Product object (product library)
These are set on individual products in your HubSpot product library.
| Property (Label) | Internal name | Type | Purpose |
| DoPricer Discount Always Empty | dopricer_discount_never | Dropdown | If set to Yes on a product, no discount will ever be applied to line items for that product, regardless of Company-level discount settings. Commonly used for delivery charges, fees, etc. |
| DoPricer Discount Message | dopricer_discount_message | Text | When populated on a product in the library, DoPricer skips all pricing and discount evaluation for any line item created from that product. |
| Product Category | dopricer_product_category | Dropdown | Classifies the product into a category for category-based discounting. Created by HubDo Support when category discounts are configured. |
| Custom price list properties | custom_price_[name]_[currency] | Number (one per price list) | Holds the custom price for this product in a given price list and currency, e.g. custom_price_wholesale_usd. Created in the “Price” property group. |
Properties created on the Line Item object
DoPricer writes to these properties on every line item it processes, recording exactly what it did and why.
| Property (Label) | Internal name | Purpose |
| DoPricer Discount Message | dopricer_discount_message | Records the discount decision. If this property already contains a value when DoPricer checks a line item, DoPricer treats it as already processed and skips it, preventing duplicate processing. |
| DoPricer Price Message | dopricer_price_message | Records the price decision, including whether a custom price list or standard price was used. |
What happens when a new line item is created
When DoPricer receives a webhook for a new line item, it follows this sequence:
Step 1 — Identify the parent object
DoPricer fetches the line item and determines what object it is associated with: a Deal, a Quote, or something else (an Order, Invoice, Subscription, or Custom Object).The line item is counted toward your subscription usage at this step, regardless of what DoPricer finds.
DoPricer receives a webhook for every new line item created in your portal — HubSpot does not filter by object type before sending. If the line item is not on a Deal or Quote, DoPricer records this and stops. No pricing or discount evaluation occurs.
Step 2 — Fetch the Deal or Quote
DoPricer fetches the Deal (or Quote) record to get two pieces of information:
-
The deal currency — critical for applying the correct price
-
The associated buyer Company
Step 3 — Check the Company
DoPricer fetches the Company record and checks the DoPricer Enabled property. If this is set to Off, or is empty, DoPricer writes "Company Off " to the line item's DoPricer Discount Message property and stops. The line item is still counted toward subscription usage.
Step 4 — Determine the price to apply
DoPricer checks whether a custom price list applies to this Company:
-
The Company record holds a DoPricer Pricelist property (a single-select dropdown). If a price list is set — for example, "Wholesale USD" — DoPricer fetches the product from your product library using the line item's SKU and reads the corresponding custom price property on that product (e.g. the "custom_price wholesale_usd" value).
-
If that property is populated, DoPricer replaces the line item's selling price with that value.
-
If the property is not populated for that product, the price is left unchanged.
-
Currency matching: DoPricer always checks that the custom price currency matches the Deal or Quote currency. If they don't match, DoPricer falls back to the standard HubSpot price for that currency and records this in the DoPricer Price Message property.
Step 5 — Determine the discount to apply
DoPricer checks for applicable discounts in strict priority order, stopping at the first match:
| Priority | Discount type | Where it is set | How it works |
| 1st | Per-product (SKU-based) | Discount By Product Items on the Company | DoPricer checks whether the line item’s SKU appears in the list. If found, that discount is applied. |
| 2nd | Per-category | Product Category on the product + matching category discount property on the Company | DoPricer checks the product’s category, then looks for a matching discount property on the Company. |
| 3rd | Default discount | Discount Default on the Company | Applied when no SKU or category match is found. |
| None | No discount | - | If all three are empty, no discount is applied. |
Override — Discount Always Empty:
If the DoPricer Discount Always Empty property is set to Yes on the product in the product library, no discount is ever applied to line items for that product — regardless of Company-level settings.
Step 6 — Update the line item and record the outcome
DoPricer updates the line item with the determined price and/or discount. It then writes to two properties on the line item:
DoPricer Discount Message — records the discount decision. Exact values written by DoPricer:
| Value | Meaning |
| Discount Always Empty | Product is marked as never discountable |
| Line Item Discount | A per-product SKU discount was applied |
| Category Discount | A product category discount was applied |
| Default Discount | The Company default discount was applied. |
| No Discount | No discount rule matched; none applied |
| Company Off | DoPricer is disabled for this Company |
DoPricer Price Message — records the price decision. Example values:
Custom price 2257 applied from custom_price_wholesale_usd — a custom price list was applied
Standard price 2700 applied based on deal currency EUR — the deal currency didn't match the price list, so DoPricer fell back to the standard HubSpot price.
Once the DoPricer Discount Message property contains any value, DoPricer treats that line item as already processed and will not re-evaluate it — this prevents duplicate processing if the line item is detected again.
Step 7 — Count the line item
The line item is added to your portal's monthly tally, which determines your subscription charges for that month.
The browser refresh requirement
DoPricer updates HubSpot data in the background. The HubSpot UI does not automatically reflect those changes until the page is refreshed. Sales reps must press browser refresh to see DoPricer's applied prices.
See How does DoPricer pricing work? for full guidance on the Deal and Quote Builder workflows, and the recommended best practice for adding line items.
Which HubSpot objects DoPricer supports
DoPricer processes line items associated with:
HubSpot Deals — always supported
HubSpot Quotes — supported, and can be toggled on or off per portal
DoPricer does not process line items on Orders, Invoices, Subscriptions, or Custom Objects. Even though it receives webhooks for line items created on those objects, it detects the association and takes no pricing action. Those line items are still counted toward subscription usage.
Whether DoPricer acts on Quotes is a per-portal setting, separate from the Company-level DoPricer Enabled toggle. Contact support@hubdo.com to change this.
Price Lock
Price Lock is a feature that monitors existing line items and re-applies DoPricer's price if it detects the price has been manually changed. It is triggered by the "line item price property updated" webhook — not the new line item webhook — so Price Lock activity does not count toward your subscription usage.
| Object | Price Lock default |
| Quotes | On by default |
| Deals | Off by default |
Price Lock is on by default for Quotes because HubSpot's Quote Builder auto-saves line item changes back to HubSpot every few seconds, without re-fetching the underlying data. Without Price Lock, a sales rep working in Quote Builder could accidentally overwrite DoPricer's correct prices. Price Lock silently restores them.
Price Lock settings are managed by HubDo. To change them, contact support@hubdo.com.
Multi-currency support
DoPricer is currency-aware throughout. Each custom price list property name ends in a 3-letter ISO currency code (e.g. "custom_price_wholesale_usd", "custom_price_wholesale_gbp" ), and DoPricer always matches the price list currency to the Deal or Quote currency before applying a price.
Each Company can have one active price list at a time. This is by design — if multiple price lists were set on the same Company simultaneously, DoPricer would have no reliable way to determine which one to apply.
If a customer buys in multiple currencies and needs different price lists for each, the solution is to create separate Company records in HubSpot — one per buying currency or entity. See How does DoPricer CPQ handle different currencies? for full guidance.
Related articles
How does DoPricer pricing work?
What will it cost to run DoPricer?
How does DoPricer CPQ handle different currencies?
For more help please email support@hubdo.com