← ClaudeAtlas

grouponlisted

Search and read Groupon deals from the terminal via curl — the consumer GraphQL API (deal search/browse, deal detail, category taxonomy). Anonymous, no key or login. Use when asked to find Groupon deals, look up a specific deal, or browse a city's offers.
chrischall/groupon-mcp · ★ 1 · AI & Automation · score 74
Install: claude install-skill chrischall/groupon-mcp
# Groupon deals via curl Groupon's consumer deal data comes from **one GraphQL endpoint** that answers a plain server-side `curl` with **no cookies, no key, no login, no bot wall**: ``` POST https://www.groupon.com/mobilenextapi/graphql -H 'content-type: application/json' -H 'apollographql-client-name: mobilenextapi' ``` Requests are a **batched JSON array** of Apollo **persisted-query** operations (`operationName` + `variables` + `extensions.persistedQuery.sha256Hash`, no query text — introspection is off and the server masks GraphQL errors as opaque 400 HTML, so you cannot hand-author queries). The response is a **JSON array**; `.[0].data.<field>` holds the payload. Ready-to-run bodies + `jq` recipes are in [`references/graphql-queries.md`](references/graphql-queries.md). ## The three operations | Need | Op | Root field | |------|----|-----------| | Search / browse a city's deals | `BrowseDealFeed` | `.[0].data.browseDealFeed.cards` | | One deal's full detail (options, price, reviews, fine print) | `getDeal` | `.[0].data.getDeal` | | Category taxonomy | `GetMainNavigation` | `.[0].data...` | `division` is a Groupon **city slug** (`new-york`, `chicago`, `syracuse`, `los-angeles`, …). `dealId` for `getDeal` is a deal's **permalink slug** = the last path segment of a card's `.url` (`https://www.groupon.com/deals/<dealId>`). ## Two failure modes - **Empty / non-JSON 2xx** → almost always a challenge interstitial; retry, don't `JSON.parse` it blind. - **`{"errors":[{