Quick Start

Introducing Brytelytics

Brytelytics is a real estate analytics service for real estate websites and mobile apps. Real estate companies use it to better understand their online consumers, if they are buyers, renters, or sellers, when and where they are looking to move, what home features they are interested in, and how close they are to needing a real estate agent.

Brytelytics runs in real estate websites and mobile apps

Brytelytics can be integrated with existing websites and mobile apps, either through client-side libraries or via custom server-side API calls. Brytecore provides several official client-side libraries including a JavaScript SDK, but for websites we recommend you integrate with the API directly via HTTP POST requests.

To integrate Brytelytics with your website or app, you should log user activities by sending events to the Brytecore API. Common events include registering for a user account, viewing a listing, running a search, saving a listing, etc.

How Brytelytics uses tracked events

Some events are used to score a user's readiness for a real estate transaction, and other events automatically deliver the user as a lead into Lead Voyager. All events, however, are used to drive the reports in the Brytelytics dashboard. This include live reports that show what's happening right now, like the activity report shown here.

Brytelytics Dashboard

In this Brytelytics dashboard screenshot you can see how scoring can be visible to the real estate company. The donut chart shows segmentation of the online leads, the Live User Activity log shows Brytelytics events as they occur. You can also see the current hottest area and most active visitor.

Choose your language

Before you get started, select the appropriate language at the top of this page. Choose JavaScript for instructions on using the client-side web library, iOS to use our Swift library, or Android to use our Java library.

If you want to implement Brytelytics server-side on your PHP, ASP.Net, Node, or other server, choose the HTTP option.

Your code will send activity events via HTTP POSTs to the API server. To avoid any potential bottlenecks, the server will only return 200 OK responses when a POST is successfully received. To see if your events are validating and logging correctly, make sure to visit the Developer Dashboard.

Select your language at the top of this page

Please note that HTTP is our recommended option for most situations, as it removes all responsibilities for the client to send accurate data and events.

If you have any questions about the right language option, please contact your developer liaison for advice.

Implementation Methods

You can install Brytelytics in your iOS or Android app via client-side tracking libraries. If you are installing Brytelytics in a website, you can choose between a JavaScript client-side library or web server-side tracking.

Client-Side Tracking

Brytecore has provided official libraries for iOS, Android and JavaScript client-side tracking. You can read these instructions in the Client-Side Tracking guide.

Server-Side Tracking

For websites, we recommend server-side tracking assisted by the client-side Brytelytics snippet, as it lowers dependency on browsers and asynchronicity issues with web forms. You can read these instructions in the Server-Side Tracking guide.

Hook Up Registrations and Logins

When a user registers with your app or web site, you should log the action with the registeredAccount event. When a registered user logs into your app or site, you should use the authenticated event. Remember to place these events wherever a user can register or authenticate, such as login pages or popover windows.

Don't forget to authenticate a user when they log in via cookie or remembered session! If you have a "Remember Me" feature, it should trigger authenticate on session start.

Below is an example user registration event. See Core Objects & Events for details on the userAccount object and registeredUser event.

/* Example user registration event. */

// Create an object to store the user data you wish to track.
var data = {
	"userAccount" : {
		"id": "123456",
		"email": "revenge@florin.com",
		"firstName": "Inigo",
		"lastName": "Montoya"
	},
	"isLead": true
};

// Call the registered event
brytescore("registeredAccount", data);

Below is an example user registration event. See Core Objects & Events for details on the userAccount object and registeredUser event.

/* Example user registration event. */

// Create an object to store the user data you wish to track.
let data = [
	"userAccount": [
		"id": 123456,
		"email": "revenge@florin.com",
		"firstName": "Inigo",
		"lastName": "Montoya"
	],
	"isLead": true
] as [String : AnyObject]

// Call the registered event
_apiManager.registeredAccount(data: data)

Below is an example user registration event. See Core Objects & Events for details on the userAccount object and registeredUser event.

/* Example user registration event. */

// Create an object to store the user data you wish to track.
final HashMap userAccount = new HashMap() {{
	put("id", 123456);
	put("email", "revenge@florin.com");
	put("firstName", "Inigo");
	put("lastName", "Montoya");
}};

HashMap data = new HashMap() {{
	put("userAccount", userAccount);
	put("isLead", true);
}};

// Call the registered event
brytescore.registeredAccount(data);

Below is an example of an HTTP POST via curl for a user registration event. You will likely use a package or library for your specific server language to handle your HTTP POST requests, rather than a curl call.

curl --location --request POST 'https://api.brytecore.com/boost' \
--header 'Content-Type: application/json' \
--data - raw '{
	"event": "registeredAccount",
	"hostName": "yoursite.com",
	"date": "2020-07-24T17:09:03Z",
	"ipAddress": "72.16.250.14",
	"apiKey": "29870424-689a-49c2-b34b-e43aef627154",
	"anonymousId": "10976b15-d02e-4a01-95cd-84bfa4150b6c",
	"userId": "123456",
	"pageViewId": "27e92a06-554c-4c16-96dc-3a5b98c51381",
	"sessionId": "41f949b0-9e89-4a21-981e-f0ed92dfef05",
	"data": {
		"userAccount" : {
			"id": "123456",
			"email": "revenge@florin.com",
			"firstName": "Inigo",
			"lastName": "Montoya"
		},
		"isLead": true
	}
}'

Log Real Estate Events

As a user performs activities on your site, you should track them with the brytescore function. The more activities you track, the more accurate the Brytelytics algorithms will be. Brytelytics supports a large variety of real estate and normal events, as listed in Real Estate Objects and Events.

As a general rule, if your app or web site has a feature related to real estate, you should be tracking it with Brytelytics. If you're looking for some guidance for prioritizing these tracked events, see the next section, Which Events Should You Track?.

Below is an example of a viewedListing real estate event. When the user is shown the details of a listing, the website tracks many details about the listing, in addition to the event itself.

/* Example listing view event. */

// Create an object to store the data you wish to track.
var data = {
	"listing": {
		"price": 349000,
		"mlsId": "2983599",
		"address": {
			"streetAddress": "196 Humperdink Lane",
			"city": "Florin City",
			"stateProvince": "Florin",
			"postalCode": "00990"
		},
		"geoLocation": {
			"latitude": "33.859821",
			"longitude": "-84.168221"
		},
		"photoURL": "http://images.yoursite.com/2983599_1.jpg",
		"listingURL": "http://www.yoursite.com/listings/2983599/",
		"fullBaths": 3,
		"halfBaths": 1,
		"bedrooms": 4,
		"subdivision": "Buttercup Rise",
		"features": [
			"Master on main",
			"Hardwood floors",
			"Fireplace",
			"Level lot",
			"Deck/Patio",
			"Fenced yard",
			"Garage: 3 car or more",
			"Garage: attached"
		]
	}
};

// Call the viewed_listing event
brytescore("realestate.viewedListing", data);

Below is an example of a viewedListing real estate event. When the user is shown the details of a listing, the website tracks many details about the listing, in addition to the event itself.

/* Example listing view event. */

// Create an object to store the data you wish to track.
let data = [
	"listing": [
		"price": 349000,
		"mlsId": "2983599",
		"address": [
			"streetAddress": "196 Humperdink Lane",
			"city": "Florin City",
			"stateProvince": "Florin",
			"postalCode": "00990"
		],
		"geoLocation": [
			"latitude": "33.859821",
			"longitude": "-84.168221"
		],
		"photoURL": "http://images.yoursite.com/2983599_1.jpg",
		"listingURL": "http://www.yoursite.com/listings/2983599/",
		"fullBaths": 3,
		"halfBaths": 1,
		"bedrooms": 4,
		"subdivision": "Buttercup Rise",
		"features": [
			"Master on main",
			"Hardwood floors",
			"Fireplace",
			"Level lot",
			"Deck/Patio",
			"Fenced yard",
			"Garage: 3 car or more",
			"Garage: attached"
		]
	]
] as [String : AnyObject]

// Call the viewed_listing event
_apiManager.brytescore(property: "realestate.viewedListing", data: data);

Below is an example of a viewedListing real estate event. When the user is shown the details of a listing, the website tracks many details about the listing, in addition to the event itself.

/* Example listing view event. */

// Create an object to store the data you wish to track.
HashMap<String, Object> address = new HashMap<String, Object>() {{
	put("street_address", "196 Humperdink Lane");
	put("city", "Florin City");
	put("state_province", "Florin");
	put("postal_code", "00990");
}};

HashMap<String, String> geoLocation = new HashMap<String, String>() {{
	put("latitude", "33.859821");
	put("longitude", "-84.168221");
}};

List<String> features = new ArrayList<String>() {{
	add("Master on main");
	add("Hardwood floors");
	add("Fireplace");
	add("Level lot");
	add("Deck/Patio");
	add("Fenced yard");
	add("Garage: 3 car or more");
	add("Garage: attached");
}};

HashMap<String, Object> listing = new HashMap<String, Object>() {{
	put("price", 349000);
	put("mls_id", "2983599");
	put("address", address);
	put("geoLocation", geoLocation);
	put("photoURL", "http://images.yoursite.com/2983599_1.jpg");
	put("listingURL", "http://www.yoursite.com/listings/2983599/");
	put("fullBaths", 3);
	put("halfBaths", 1);
	put("bedrooms", 4);
	put("subdivision", "Buttercup Rise");
	put("features", features);
}};

HashMap<String, Object> data = new HashMap<String, Object>() {{
	put("listing", listing);
}};

// Call the viewed_listing event
brytescore.brytescore("realestate.viewedListing", data);

Below is an example of a viewedListing real estate event being tracked from a curl call. When the user is shown the details of a listing, the website tracks many details about the listing, in addition to the event itself.

curl --location --request POST 'https://api.brytecore.com/boost' \
--header 'Content-Type: application/json' \
--data - raw '{
	"event": "realestate.viewedListing",
	"hostName": "yoursite.com",
	"date": "2020-07-24T17:09:03Z",
	"ipAddress": "72.16.250.14",
	"apiKey": "29870424-689a-49c2-b34b-e43aef627154",
	"anonymousId": "10976b15-d02e-4a01-95cd-84bfa4150b6c",
	"userId": "123456",
	"pageViewId": "27e92a06-554c-4c16-96dc-3a5b98c51381",
	"sessionId": "41f949b0-9e89-4a21-981e-f0ed92dfef05",
	"data": {
		"listing": {
			"price": 349000,
			"mlsId": "2983599",
			"address": {
				"streetAddress": "196 Humperdink Lane",
				"city": "Florin City",
				"stateProvince": "Florin",
				"postalCode": "00990"
			},
			"geoLocation": {
				"latitude": "33.859821",
				"longitude": "-84.168221"
			},
			"photoURL": "http://images.yoursite.com/2983599_1.jpg",
			"listingURL": "http://www.yoursite.com/listings/2983599/",
			"fullBaths": 3,
			"halfBaths": 1,
			"bedrooms": 4,
			"subdivision": "Buttercup Rise",
			"features": [
				"Master on main",
				"Hardwood floors",
				"Fireplace",
				"Level lot",
				"Deck/Patio",
				"Fenced yard",
				"Garage: 3 car or more",
				"Garage: attached"
			]
		}
	}
}'

Which Events Should You Track?

Generally, you should track every event that your website or system supports. Your Brytelytics dashboards and user profiles will be more accurate and interesting if you track all of your events.

Events are tracked for specific purposes and each has its use. Events can be used for reporting, for lead scoring and profiling, or for generating leads to be sent to your agents.

You may want to focus on lead-generating events first, to ensure all leads get captured and pushed into Lead Voyager. If you are not using the lead routing features of Lead Voyager, this may not be a priority, and you may want to focus on which events are used for reporting app and site activity for your brokerage and marketing teams.

Reporting Events

These events drive the charts in your reporting dashboards. If these events are not tracked, some of your reports will be missing or incomplete.

Scoring Events

These events add data used by the Brytelytics machine learning algorithms to understand lead personas and aggregated information, such as target neighborhood and price. Without these events, the accuracy of predictions and behavior thresholds may suffer.

Lead-Generating Events

These events create new leads that can be assigned to agents. Without these events, you may not capture all situations where a lead may expect to be contacted by an agent.

Which Properties Should You Track?

Many events expect an object as one of the parameters. Similar to event tracking, you should track every property on objects that your system supports. This section should help you prioritize which object parameters you should provide.

listing
  • address (an address object)
  • bedrooms
  • features (an array of strings, ex: ["master on main", "fireplace", "level lot"])
  • fullBaths
  • geoLocation (a geo object)
  • halfBaths
  • isCommercial
  • isCondo
  • isForeclosure
  • isLot
  • isMultiFamily
  • isRental
  • isSingleFamily
  • listingURL
  • mlsId
  • photoURL
  • price
address
  • streetAddress
  • streetAddress2 (null if unavailable)
  • city
  • stateProvince
  • zipPostal
  • country
geo
  • latitude (ex: 33.859821)
  • longitude (ex: -84.168221)
search

Note these are parameters passed by the user when performing a search. As such, none are required, because the user may not pass any parameters at all, or only a few. Send us what the user searches for.

  • address (an address object, ex: {"state":"RI"} when searching only for properties in Rhode Island)
  • bedroomsMin
  • bedroomsMax
  • cities (an array of strings, ex: ["Cape Cod", "Boston"])
  • counties (an array of strings, ex: ["Barnstable"])
  • features (an array of string values of features that the user checked in their search, ex: ["Beach", "1 Car Garage", "Bungalow"])
  • fullBathsMax
  • fullBathsMin
  • halfBathsMax
  • halfBathsMin
  • isCondo
  • isForeclosure
  • isLot
  • isMultiFamily
  • isRental
  • isSingleFamily
  • mlsIds (an array of strings, ex: ["1118198"])
  • postalCodes (an array of strings, ex: ["02840", "02891"])
  • priceMax
  • priceMin
  • resultsCount (the number of matching search results)
  • searchURL
  • yearBuiltMax
  • yearBuiltMin
realEstateForm

Note that these fields will vary by form - send what you have.

  • agentName
  • fromEmail
  • fromName
  • fromTelephone (a telephone object)
  • isPrequalified
  • isWorkingWithAgent
  • message
  • name
  • relatedListing (a listing object)
  • subject
  • toEmail
  • toName
telephone

Note that this can include more than one number, but only one number of each type.

  • mobile
  • home
  • work
  • fax
  • direct

Update Your Privacy Policy

By using our analytics, you may be exceeding the limits of your existing website privacy policy. You must explicitly state how your users' data is to be used. We recommend adding the following language (or something substantially similar) to your existing privacy policies.

Third Party Data Analytics Provider

We have engaged a third party data analytics service provider (the “Data Analytics Provider”) to assist us in better understanding our users, their preferences and how such users use our website and mobile application. Such Data Analytics Provider collects and helps us understand certain information about you, including (1) personal information and other information about yourself that you have chosen to share with us by completing our online forms or by sending us e-mail communications, (2) information about your actions on our website and our mobile application, such as properties you’ve viewed or saved, searches you have run, and listings you have shared with others, and (3) information about your computer or device, such as information about your browser and operating system software, information about your internet connection, and generalized location data associated with your IP address. We use this information to improve our website and our mobile application and to better understand our users’ motivation and desires so we can recommend better properties and provide better service to you. Additionally, the Data Analytics Provider may: (a) process and analyze information, including personal information, about you and your actions on our website and mobile application and present such information to us in a summary form; (b) combine such information, including your personal information, with other information about you available from third party sources; and (c) use and disclose aggregated information about you and your preferences (but not your personal information) to third parties.

Tracking

Tracking involves the use of cookies, web beacons, software development kits (SDKs) or other embedded code or tracking technologies to collect, analyze and store information on a user’s behavior over time on multiple sites, including information on the sites visited, products viewed, products purchased and other online interactions. Tracking information can be used by the website or mobile application operator to better understand its users and their preferences or to enable other companies to make interest-based (behavioral) advertising available to users on multiple sites that they visit.

We may collect personal information about your on-line activities over time and across third party sites for tracking purposes when you use our website and/or mobile application or use our services. In addition, other parties, including our third-party service providers (such as the Data Analytics Provider set forth above), third-party advertisers, ad networks, ad servers, Internet providers and mobile device providers may use tracking technologies to collect personal information about your on-line activities over time and across third party sites when you use our website and/or mobile application or our services. We do not control these third parties’ tracking technologies or how they may be used. If you have any questions about an advertisement, you should contact the responsible advertiser directly.

Some web browsers may transmit “DO NOT TRACK” signals. Our website does not currently respond to any “DO NOT TRACK” signals sent by your browser or otherwise.

California Civil Code Section 1798.83 permits users of our website or mobile application who are California residents to request certain information regarding our disclosure of personal information to third parties for their direct marketing purposes. To make such a request, please send an e-mail to [E-MAIL ADDRESS].

Technical Support

For help implementing the Brytelytics API, please reach out to support@brytecore.com.

Brytecore customers and partners get free programmer support when implementing the Brytelytics API. To learn more about how the Brytecore Lead Conversion Engine can help your team close more leads, visit the brytecore.com.