Menu · Listings
Listings

Get listing engagement

GEThttps://api.ruuster.com/v1/properties/{propertyId}/engagement

How people engaged with one listing across Ruuster sites, by day, week or month: views, visitors, favorites, tour requests, offers, shares, contact requests and push alerts. The seller-report call. With scope=any, your own leads' activity on any one listing.

  • Authentication: x-api-key and x-email headers of an owner or admin
  • Rate limit: 120 requests per minute per key
View as Markdown

Path parameters

Name Type Description
propertyId string The listing's propertyId (uuid), or mls:<number> to find it by MLS number. See MLS numbers

Query parameters

Name Type Default Description
from date 30 days before to First day, YYYY-MM-DD in America/Chicago, included
to date today Day after the last day, YYYY-MM-DD, excluded
granularity string day day, week (Monday start) or month
scope string brokerage brokerage: one of your listings, with every figure below. any: any single listing, by propertyId, with only your own leads' figures (see below)

Response

data.series has one entry per bucket (bucket is the bucket's first day, partial marks a bucket cut off by your range) and data.totals covers the whole range. Each contains:

Field Description
views.total public.pageViews + loggedIn.views. Ruuster's best combined figure for views, not an exact count
views.public.pageViews Views by visitors who weren't logged in, as Google Analytics measures them on this listing's pages across Ruuster sites. Reloads count
views.public.users Distinct public visitors as Google Analytics counts them (roughly, distinct browsers). The closest available figure for "how many people"
views.public.sessions Visits that included this listing
views.public.fromMySites, fromOtherRuusterSites Public views on your hostnames vs other brokerages' Ruuster sites
views.loggedIn.views Views by signed-in Ruuster users, from Ruuster's own records. Reloads count
views.loggedIn.lead, agent Of those, by leads and by agents (yours or another brokerage's)
views.loggedIn.uniqueLeads Distinct leads who viewed
views.loggedIn.fromMySites, fromOtherRuusterSites Logged-in views by site
views.gaSignedIn Google Analytics' own count of signed-in views and users. A cross-check on loggedIn, not added into total
favorites Times the listing was saved. A tour request also saves the listing
tourRequests Tour requests for the listing
offers Offers submitted through Ruuster
shares.sent, shares.opens Share links for this listing created on your Ruuster sites, and opens of those links
contactAgentClicks Contact-agent requests sent from the listing page
pushAlertsSent Mobile push alerts that linked directly to this listing. Most alerts link to a saved search instead, so this is usually small

Visitor and lead counts (users, uniqueLeads) are distinct per day. In week and month buckets they are the sum of each day's count, so a person who came back on several days is counted on each of those days. They're null in totals, because people aren't additive across buckets.

Public views come from Google Analytics and logged-in views from Ruuster's own records, and total adds the two. The two sources measure differently, so a small number of visits can be counted in the wrong group. Google Analytics doesn't see visitors who block analytics, so treat public numbers as a floor. Buckets outside meta.coverage return null, never 0.

To see which of your leads are behind the logged-in views, use List a listing's viewers.

Any listing: scope=any

With scope=any the listing can be one that isn't yours, for example a home one of your buyers keeps coming back to, identified by propertyId (resolve an MLS number with Look up any listing by MLS number first). The series then describes your own leads only: views.loggedIn.lead (their views, reloads count), views.loggedIn.uniqueLeads (how many of them), favorites (your leads who saved it) and tourRequests (your leads who requested a tour), per bucket and in totals, where the counts of leads are true distinct counts over the range. Everything that describes other people's activity is null: views.total, views.public, views.gaSignedIn, views.loggedIn.views, agent, the site split, offers, shares, contactAgentClicks and pushAlertsSent. The shape of the response is the same, so one parser serves both scopes, and meta.scope says which you got. It's always one listing per call; the ranked all-listings call covers your inventory only.

Not available per listing: how many Ruuster emails included the listing, and how many saved searches match it.