AI & Automation
Bazaarvoice Review Response Console
Bazaarvoice's own portal has no bulk API for drafting and tracking review responses across several product lines at once, so this tool scrapes the portal's DOM through a bookmarklet, imports at scale via CSV, drafts response options in each product line's own established tone using a local AI CLI, and generates branded PDF/DOCX reports clustering what reviewers are actually saying.
Stack
Concepts
How it works
The whole flow, traced from your first tap.
- 01
Bookmarklet → clipboard
Scrape the portal without an API
Because the portal's CSP blocks a direct cross-origin send, the bookmarklet reads each review card by its real selectors, detects the product line from the page itself, and writes the scraped JSON to the clipboard instead — the operator pastes it into the app to import.
DOM selectors on review cardsBrand auto-detectClipboard, not POST - 02
Express + better-sqlite3
Reviews land in one place
Whether reviews arrive from a clipboard paste or a bulk CSV export, they're deduped against what's already stored and become filterable by sentiment, respondability, and posted status in one queue.
Paste + CSV importDedupe on review idSentiment/status filters - 03
AI response engine
Draft a response in the brand's own voice
Past approved responses for that specific product line are sampled and injected into the prompt as a style framework before the model drafts two ranked reply options, with the local CLI call falling back to a second AI engine automatically if the first one fails.
Per-product-line few-shot historyClaude default, Codex fallbackTwo ranked options - 04
Vanilla JS SPA
Post by hand, mark it done
The operator copies the chosen reply into the actual portal, then flips it to posted in the app — the button updates the instant the write succeeds rather than waiting for a re-render, reverts cleanly on a failed request, and every mutation is recorded to an activity log.
Optimistic state updateRollback on failureActivity log - 05
PDFKit / html-to-docx
Roll it up into a client report
A separate reporting pass clusters what reviewers are actually saying into themes and renders a branded PDF or Word report — including hand-drawn star ratings — for the client's own review of the period.
AI-clustered themesHand-drawn star ratingsBranded PDF/DOCX export
The problem
Responding to product reviews consistently across multiple product lines inside Bazaarvoice's own admin portal is entirely manual — there's no export for drafting at scale, no shared memory of how a given brand voice has responded before, and no simple way to see, at a glance, what's been posted versus what's still sitting in the queue.
What we built
A bookmarklet that scrapes review cards straight off the portal page, a small Express + better-sqlite3 backend, and a hand-rolled vanilla-JS single-page app for triage. Reviews come in either through the bookmarklet or a bulk CSV import, get deduped on their Bazaarvoice id, and can be filtered by sentiment, whether they're respondable, and whether they've already been posted.
Clipboard, not a POST — and a voice grounded in real history
Bazaarvoice's portal blocks cross-origin POST requests via CSP, so the bookmarklet never tries to send data directly — it scrapes each review card by CSS selector, auto-detects the product line from a query parameter on the page, and writes the resulting JSON straight to the clipboard for the operator to paste into the app. Drafting works the same way around a real constraint: extractFrameworkResponses() pulls from each product line's own log of past approved responses, shuffles and caps a sample of them, and injects that history into the prompt as a style framework — so a generated reply matches an established tone instead of a generic one, with Claude as the default engine and a local Codex CLI as an automatic fallback.
Outcome
One operator can triage, draft, and mark reviews posted across several product lines from a single screen, with every mutating action logged to an activity table and the UI updating optimistically the instant an API call succeeds — never waiting on a later re-render, and rolling back cleanly if a write fails. A separate reporting flow clusters review themes with AI and renders them into a branded PDF or DOCX for the client, star ratings and all.
Interested in something similar?
Tell us what you need and we'll figure out how to ship it.