A job ad is a company spending money on a problem and naming it out loud. A one-star review is that company's customer naming it for them: publicly, specifically, with a date attached, and in language nobody in the company would ever have chosen.
A dental clinic whose last twelve reviews say "waited forty minutes on hold, nobody ever picks up" is a qualified lead for whoever sells phone automation. The problem is confirmed. The severity is quantified: it is costing them reviews, which is costing them patients. And the first line of your email is already written, in their own customers' words, with a link.
This is places mode. It is the same insight that makes job postings work, arriving through a different door, and it is aimed squarely at a market that most of the social-listening category does not serve at all: agencies and vendors selling into local services.
The unit of output: the business, never the reviewer
This is stated in the classification rubric because it decides everything downstream.
The reviewer is not the target. The business is.
You are not trying to reach the person who waited forty minutes on hold. You are trying to reach the practice manager who now has a public one-star review about their phone system. The reviewer is the evidence; the business is the prospect.
That settles a surprising number of questions at once. The contact record you need is the business's: its published phone number and website, which Google's own Maps listing already carries. There is no person to enrich, no pseudonymous handle to resolve, and none of the personal-data exposure that person-level GTM tools carry, because a business's published commercial listing is not personal data.
It is, not coincidentally, the most accurate contact data anywhere in the product and it costs nothing extra to obtain.
Step 1: resolve real businesses, in the wizard
POST /v1/listeners/resolve-places
Authorization: Bearer op_live_...
Content-Type: application/json
{ "query": "dental clinic", "location": "Toronto" }You get back candidate businesses with their address, star rating and review count, and nothing is auto-selected. You pick.
Those three fields are shown for one reason: they are what a human uses to tell two same-named businesses apart. "Bayview Dental" is four different businesses in the Greater Toronto Area and one of them is a veterinary practice.
Resolution is a wizard step, never something a run does
This is the most important architectural decision in the mode and it is worth being explicit about, because the alternative is superficially more convenient.
If a listener resolved places at run time, it would silently repoint at a different business the day Google reranked its results. Your listener for a specific dental group would quietly start collecting reviews for a same-named practice in another city (or another trade entirely) and nothing on screen would say so. That is the single most common way a review-based listener fills up with irrelevant data, and it is unfixable after the fact because you cannot tell which rows came from which resolution.
So resolution happens once, when a human is looking at it, and the listener stores the resolved place ids. A run reads reviews for exactly the businesses you picked.
Why SerpApi and not Google's own Places API
Reviews come through SerpApi (google_maps to resolve, google_maps_reviews to read). Google's official Places API is the wrong tool here for two independent reasons, and both are disqualifying rather than inconvenient:
- It returns about five reviews per place, with no way to page into the one- and two-star tail. Dissatisfaction is the tail. An API that hands you the five reviews Google chose to feature is an API that hands you the five happy ones.
- Its policies forbid storing Places content beyond narrow exceptions, which is precisely what a signal pipeline does with everything it keeps.
One operational note: Maps and reviews bill as ordinary searches, not on a free tier. Having the key is not the same as having the access.
Step 2: the star gate, which is the cheapest thing in the product
A review above the listener's maxRating (default 3) is rejected before any model call, with the reason recorded as rating.
Google Maps ratings skew high. Heavily. Most reviews on most businesses are four and five stars. Dropping everything above three removes the large majority of the retrieved volume for the cost of an integer comparison, and every one of those dropped reviews would otherwise have cost a rerank call and possibly a classification call to reach the same conclusion.
This is the general shape of the pipeline: cheap gates first, expensive judgement last. Page shape, star rating, keyword topicality, exclusions, blocked domains, recency, duplicates, all before the reranker, which is before the classifier. Everything rejected is kept for 14 days with its reason, so you can see what the filter cost you rather than trusting that it worked.
Three things about reviews that are easy to get wrong
All three of these are handled, and all three are the kind of bug that produces plausible-looking wrong data rather than an error.
Dates. Google reviews report "3 months ago", not a timestamp. An unparsed relative date is worse than a missing one: the recency gate compares Date.parse(…) < cutoff, and NaN < cutoff evaluates to false, so an unparsed review sails straight past the window it was supposed to be excluded by. Relative dates are resolved to a real date and flagged approximateDate, which the dashboard renders as a ~ rather than implying a precision the source never gave.
Dedupe. Every review of a place shares that place's URL, so the URL cannot be the dedupe key: keying on it would collapse a business's entire review history into one row. Review and comment adapters supply their own keys (gmaps:<placeId>:<reviewId>), and supplying one also disables title dedupe, because two short complaints legitimately normalise to the same string. "Never answer the phone" is not a duplicate of "Never answer the phone" when two different customers wrote it about the same clinic six weeks apart. It is the pattern.
Volume asymmetry. A business with 2,000 reviews and a business with 30 are not comparable on complaint count. The roll-up gives you the count and the trend; read them together.
Step 3: the roll-up is the call list
Individual reviews are evidence. The deliverable is the table.
GET /v1/places?listenerId=lst_...Paginated, strongest prospect first. One row per business:
| Column | What it is |
|---|---|
| Subject | The business |
| Count | Qualifying reviews in the window |
| Trend | The same count for the window before it |
| Themes | Ranked by frequency: hold times, no-shows, billing disputes, rude staff |
| Strongest quote | The one you put in the first line |
Themes are the part that changes how you sell. "Nine complaints about hold times" is a pitch. Clicking it gives you the nine complaints, which is a call where you read one of them aloud.
Signals in this mode carry a star rating and a list of themes alongside the usual fields, and the label vocabulary is its own: pain_confirmed and at_risk shown by default, with healthy and noise behind tabs.
The window is 90 days rather than the 30 the other modes use. Reviews accrue more slowly than forum posts, and a clinic's phone problem does not stop being true after a month.
Rivals, local prospects and hiring accounts are the same table with different columns, so they share one component and one mental model. Learn it once.
Step 4: the contact is already in the payload
For places, the contact record is the easiest in the entire product and needs no vendor: Google's Maps listing carries the business's phoneNumber and website, which is the whole contact record for local prospecting. Published by the business, on the business's own listing, kept current by the business because they want customers to call.
That is roughly 99% accurate, free, and, because a commercial listing is not personal data, outside the GDPR surface that person-level enrichment vendors carry.
Compare that with what the same question costs in the other modes. For market and rivals, the person is a pseudonymous forum handle and there is no legitimate route to a verified work email at all. The mode that needs no vendor is also the mode with the highest contact coverage, which is a large part of why places is the best-margin motion in the product.
The practical shape of the outbound, then:
complaint → business → published phone number → a call where you
already know what is broken and can quote their own customerNot a cold email. A call, with a script.
Step 5: the agency shape
This is where the mode earns its keep, and it is worth laying out because it is a genuinely different business model from the rest of the category.
An agency selling phone automation, reputation management, scheduling software or front-desk staffing to local services can run one places listener per vertical per metro:
listener: "dental clinics · Toronto" → 40 practices
listener: "auto repair · Greater Boston" → 60 shops
listener: "med spas · Phoenix" → 35 locationsEach one produces a monthly ranked list of businesses whose own customers have publicly documented the exact problem you sell against, with a phone number and a quote attached. That is a prospecting motion with a hit rate no cold list matches, because you are not guessing at fit: the prospect's customers already confirmed it in writing.
Two ways to run it operationally:
One workspace per client, if you are white-labelling. Each client sees their own listeners and nothing else. Workspaces are fully isolated; every record is org-scoped.
One workspace, many listeners, if the agency owns the prospecting. Pro allows 5 listeners and 20 members; Enterprise removes the caps and adds the live competitor feed. If you are running twenty client verticals, that is an Enterprise conversation and the answer usually includes a dedicated hosted environment.
Delivery for this shape is usually the CSV rather than a webhook, because the consumer is a person with a dialler rather than a system:
GET /v1/exports/accounts.csv?format=crm-generic&owner=...®ion=...crm-generic gives you the fields worth importing under neutral names; crm-hubspot gives you HubSpot's own import headers, which is what turns a one-click import into a one-click import rather than a twenty-field mapping exercise. Both are on Pro. Files carry a UTF-8 BOM, because Excel on Windows otherwise reads a CSV as the system codepage and mangles every non-ASCII business name, which, in local services, is a lot of them.
An unfiltered export is the whole workspace in one file, which is the shape every exfiltration incident takes and the shape a departing employee reaches for. So admins may do it; members must narrow it with a filter first. Every export writes an audit line with the actor, the filter and the row count.
The honest limits
Coverage is Google Maps, not the whole internet. Yelp, Facebook and industry-specific review sites are not in this mode. Maps is where the volume is for most local trades in North America; it is not where all of it is.
Themes are extracted, not curated. They come from the classifier reading the review, so a niche vertical will produce theme labels that read a little generically for the first few runs. Thumbs-down the bad ones: labelled examples are inlined into that listener's next classification prompts as calibration.
It will not tell you the practice manager's name. It tells you the business, the problem, the evidence, the phone number and the website. Getting past the front desk is still your job.
This is prospecting, not reputation management. If you want to monitor your own reviews and respond to them, buy a review-management tool: that is a different product with a different job. This mode reads other businesses' reviews to find out who has a problem you can fix.
Getting started
- Pick one vertical and one metro. Resolve twenty to fifty businesses in the wizard. Check the addresses: this is the step where mistakes are cheap.
- Leave
maxRatingat 3 for the first run. Drop it to 2 if the volume is noisy; raise it to 4 only if the vertical genuinely has a high floor. - Run it on a weekly schedule. Reviews are not a real-time surface and an hourly listener here is money spent on nothing.
- Read the roll-up by theme, not by business. The theme tells you which pitch to lead with; the businesses under it are the list.
- Export to CSV, dial, and quote the review.
places mode is available on both plans: Go at $49/mo and Pro at $499/mo. CRM export formats and the competitor watchlist are Pro. Both open with a 14-day trial that takes a card up front.
See it on your own market
Paste your website, review the plan it proposes, and read what comes back tomorrow morning.
Questions about anything here? Email support@openpulse.cloud.