ChatGPT Setup β€” Build a Custom GPT That Negotiates Prices

🎯 Just want to USE the GPT, not build one? A published Custom GPT is already live:

πŸ‘‰ Install Negotiate Agent

One click in any browser. Requires a ChatGPT Plus/Pro/Team account to install (free accounts can use it once installed). Skip the rest of this guide.

If you'd rather build your own (e.g., to brand it for your own store, customize the instructions, or fork the proxy logic) β€” keep reading.


This guide walks you through creating a Custom GPT in ChatGPT that can find negotiate.v1-compliant stores and haggle on your behalf. End state: anyone with a ChatGPT Plus/Pro/Team account installs your Custom GPT and starts negotiating in two clicks.

Total setup time: ~10 minutes, all in the GPT Builder UI. No code.


What you get

After publishing, anyone using your Custom GPT can say:

"Find me a store that sells Dyson vacuums and negotiate the V15 down to under $560."

ChatGPT calls the negotiate.v1 proxy at negotiate.pier39.ai, which:

  1. Searches the public store directory for matching stores
  2. Discovers each candidate's catalog
  3. Opens a chat session with the chosen store's AI sales rep
  4. Drives the negotiation turn by turn until the deal closes (or walks)

ChatGPT applies real shopper tactics: anchor low with comps, push for bundles, walk gracefully if the floor's too high. The merchant agent on the other side does the same in reverse.


Prerequisites


Step 1 β€” Open GPT Builder

  1. Go to chatgpt.com and sign in.
  2. In the left sidebar, click Explore GPTs (or GPTs in some versions).
  3. Click + Create in the top-right.

You'll land in GPT Builder, which is a split-screen tool: a chat-style assistant on the left helps you configure, the right side shows a live preview of your Custom GPT.

Step 2 β€” Switch to the Configure tab

By default GPT Builder opens to the conversational "Create" tab. You can use that, but for this setup the Configure tab is faster. Click Configure at the top.

You'll see a form with these sections (top to bottom):

Fill them in as below.

Step 3 β€” Name + Description

Name: Negotiate Agent
Description: Find AI-negotiable stores and haggle prices for you. Works at
any negotiate.v1-compliant storefront.

(Adjust the wording to taste β€” these are visible to anyone browsing your GPT.)

Step 4 β€” Instructions (the system prompt)

This is the most important field. Paste this verbatim into the Instructions text area:

You are a shopper agent that negotiates prices on behalf of the user at
negotiate.v1-compliant storefronts. You have 5 actions available:
findStores, discoverStore, listProducts, startNegotiation, sendMessage.

# When the user asks to negotiate

1. If the user names a specific product but no store, use findStores with
   their search terms (e.g. findStores(query="dyson vacuum")). Pick the
   most relevant store from the results and ask the user to confirm β€”
   unless they've made it clear to just go ahead.

2. If the user names a specific store domain, skip findStores and go
   straight to discoverStore(domain=...) to fetch the catalog.

3. Use listProducts (or read the products array from discoverStore) to
   find the matching product. Note its `id`, `list_price`, and any
   relevant fields.

4. Call startNegotiation(domain=..., product_id=...). Save the returned
   session_id and the domain β€” you need both for every subsequent turn.

5. Read the merchant's greeting (in the response). Then craft your
   opening shopper turn and call sendMessage(domain=..., session_id=...,
   message=...). Pass the user's stated budget, any comps they
   mentioned, and what extras they value (free shipping, warranty, etc.).

6. After each sendMessage, read the merchant's reply. Decide whether
   to push back, accept, or walk. Apply real negotiation tactics:
   anchor below the user's budget, justify with comps, trade
   non-price concessions instead of giving on price, walk gracefully
   if the merchant's floor exceeds the user's budget.

7. Keep going until sendMessage returns "closed":true. Then summarize
   the deal for the user: final price, what's bundled, total
   effective cost.

# Negotiation principles

- The merchant agent is also AI. It holds its floor. It's not pretending.
- Never roleplay both sides. Only the user sees your messages; only the
  store's API sees the merchant's. Don't fabricate merchant replies.
- Don't reveal the user's true ceiling. If they said $500, anchor at $450.
- Free shipping, extended warranty, bundled accessories are all real
  cheap concessions worth pushing for. They're often easier to get than
  a price drop.
- If the merchant repeats the same number twice, that's likely their
  floor. Make your final move close to it or walk gracefully.
- A walk-away has signaling power. Sometimes the merchant comes back
  with a better offer through a different lever.

# Failure modes to avoid

- DO NOT roleplay the merchant's responses. If sendMessage fails or
  returns an error, tell the user β€” don't fake a reply.
- DO NOT call sendMessage without first calling startNegotiation.
- DO NOT lose the (domain, session_id) pair across turns β€” they're
  paired and both required.

Step 5 β€” Conversation starters

These are the example prompts that appear under the GPT name when users open it. Add four:

Find me a Dyson vacuum I can negotiate for, target under $560
Find me an Airwrap, target under $480, must include the gift box
Find a Dyson air purifier, target under $510 with extra filters
Find a hair dryer at a discount, ideally under $345

(These all map to the Atlas reference store today. As more stores join the directory, you'll add more diverse examples.)

Step 6 β€” Capabilities

Uncheck everything in the Capabilities section:

Disabling unused capabilities makes the GPT faster and cheaper.

Step 7 β€” Actions

This is the hookup that makes everything work. Scroll to the Actions section at the bottom of the Configure form.

  1. Click Create new action.
  2. In the Authentication dropdown, leave it as None (the proxy is public, no auth needed).
  3. In the Schema field, paste this URL:

https://negotiate.pier39.ai/openapi.yaml

ChatGPT fetches the OpenAPI manifest from that URL and auto-imports all 5 actions. You should see them appear in a table below: findStores, discoverStore, listProducts, startNegotiation, sendMessage.

  1. In the Privacy policy field, paste:

https://negotiate.pier39.ai/docs/protocol

(ChatGPT requires a privacy policy URL for actions; the protocol page works since it's about how data flows.)

  1. Scroll back up and confirm the Actions count says 5 actions configured.

Step 8 β€” Test it

GPT Builder's right-side preview is a live ChatGPT instance using your Custom GPT. Test before publishing.

In the preview chat, type:

Find me a Dyson HP07 air purifier and negotiate it down to under $510.

You should see ChatGPT:

  1. Call findStores with query="dyson air purifier" β†’ returns Atlas
  2. Call discoverStore with domain="negotiate.pier39.ai" β†’ returns the catalog
  3. Call startNegotiation with product_id="hp07-hot-cool" β†’ returns session_id + Chonkers's greeting
  4. Call sendMessage with the opening shopper turn β†’ reads the merchant's reply
  5. Loop on sendMessage until closed:true

Each action call shows up as a small "Used [actionName]" line in the chat. Click any of them to expand and see the actual request/response.

If anything fails, check the error message in the response. Common causes:

Step 9 β€” Publish

In the top-right of GPT Builder, click Save (or the dropdown next to Save).

Choose visibility:

For your launch: pick Everyone and submit it to the GPT Store. There's a category dropdown when you publish β€” pick Productivity or Lifestyle depending on the framing you want.

After publishing, you get a shareable URL like https://chatgpt.com/g/g-XXXXXXXXX-negotiate-agent that you can drop into your launch post, blog, social media, etc.


What this gets you

A ChatGPT-native shopping experience that competes directly with Claude Desktop's MCP install. Anyone with a ChatGPT account can install your Custom GPT in two clicks and start negotiating immediately. No Claude account required. No connector config to paste. Just "Add to ChatGPT".

That doubles the addressable shopper population overnight.

Going further


See also


License

The protocol and proxy are MIT-licensed. The skills are Apache 2.0.