Sprout API
Sprout API Overview
The Sprout API provides an externally accessible API for you to access your owned social profile data so you can use that data to power dashboards and automate your reporting.
Available Data Overview
✅ The Sprout API includes:
- ✅ Owned Profile Data - This matches the data available in Sprout’s Profile Performance, Twitter Profiles, Facebook Pages, Instagram Business Profiles, LinkedIn Pages, Pinterest Profiles, TikTok Profiles and YouTube Videos Report.
- ✅ Post Data - This matches the data available in Sprout’s Post Performance Report.
- ✅ Message Data - Get detailed information, including metadata, about your messages. This includes messages received by and replied to from your profiles.
- ✅ Direct Tableau Connector - Easily analyze Sprout API data directly in Tableau. For more details reference the Tableau Connector section of this doc.
For specific data and metrics, reference the Metrics & Fields sections of this doc.
🚫 The Sprout API does not currently include:
- 🚫 Paid (Ad Account) data
- 🚫 Listening data
- 🚫 Publishing data or capabilities
- 🚫 Owned demographic data
Access Requirements & Authentication
Before accessing the API, your account must be provisioned for API use by your Sprout account representative. Once the account is provisioned, you must obtain an access token. To do so, follow the steps in the Creating an access token as an Account Owner section. The Account Owner can create new access tokens via the dialog, view existing access tokens or invalidate existing tokens (i.e. prevent the tokens from being used for client requests).
Terminology
- Post: A post refers to a message that was published by an owned profile.
- Message: A message refers to any message that was published by or received by an owned profile. All posts are messages, but not all messages are posts.
- Profile: A profile refers to an account, page, handle, etc. on a native social network, like Twitter or Instagram.
Creating an access token as an Account Owner
- Log in to Sprout and navigate to Settings.
- Scroll down to the reporting section and click API Tokens.
- Accept Sprout’s Analytics API Terms of Service, if you haven’t already.
- Click Create API Token in the upper left corner.
- Enter a name for your token.
- Copy the token for use. Be sure to store this securely.
Twitter Data: Twitter Content End User License Agreement
Note: Twitter has additional review and compliance requirements around exposing data through the API. You’re required to undergo a brief Twitter review and approval process before you can access Twitter's data through the Sprout API.
Contact your Sprout Social account representative to initiate the review process with Twitter. After Twitter approves your use case, the Account Owner needs to accept the Analytics API Twitter Content End User License Agreement. This appears at the top of the API Tokens settings page.
Sprout API Details
API URL
https://api.sproutsocial.com
Endpoints Overview
Sprout API endpoints are grouped into three collections:
- Customer Metadata Endpoints - Use these endpoints to obtain high-level information about your Sprout customer account and profiles you have access to; many of these endpoints provide data needed to make requests to other Sprout API endpoints.
- Analytics Endpoints - These endpoints provide information about your Sprout profiles and posts.
- Messages Endpoint - This endpoint provides detailed data and metadata about your Sprout messages.
Customer Metadata Endpoints | Description |
---|---|
GET /v1/metadata/client |
Customer ID |
GET /v1/<customer ID>/metadata/customer |
Customer Profiles |
GET /v1/<customer ID>/metadata/customer/tags |
Customer Tags |
GET /v1/<customer ID>/metadata/customer/groups |
Customer Groups |
GET /v1/<customer ID>/metadata/customer/users |
Customer Users |
Analytics Endpoints | Description |
---|---|
POST /v1/<customer ID>/analytics/profiles |
Owned Profile Analytics |
POST /v1/<customer ID>/analytics/posts |
Post Analytics |
Messages Endpoint | Description |
---|---|
POST /v1/<customer ID>/messages |
Inbox Messages |
General API Structure
All endpoints use the following naming structure:
/<version>/<customer ID>/<endpoint path>
Where:
- version is the API major version number
- customer ID is your Sprout customer ID
Versioning
The Sprout API is versioned using a MAJOR.MINOR
version format.
You can specify only the major number in requests, but the full version is included in responses.
A major version represents a breaking change to the API, including updates to the syntax and semantics for making requests of the APIs and the syntax and semantics of the response of the API.
A minor version represents a backwards compatible change to the API, such as adding new metrics, new endpoints, metric updates, etc. Minor versions are reflected in documentation, but not the API URL itself. Due to the backwards compatibility of minor versions, you only need to specify the major version in the URL path.
Rate Limits
You’re limited to the following number of requests:
- 60 requests per minute
- 250,000 requests per month
Endpoints
Requests
All requests have the following format:
Request Headers
Type | Value |
---|---|
Authorization | Bearer <API access token> |
Accept | application/json |
Content-Type | application/json |
Request Body
The content body for all requests are JSON objects. Details of the structure of that JSON object depend on the endpoint.
Responses
HTTP Status Codes
The following HTTP status codes returned with the response have the following meanings:
Code | Meaning | Corrective Action |
---|---|---|
200 OK | Request was processed successfully. | None. You should be able to access the result of the request in the response body. |
400 Bad Request | The request is malformed and does not conform with the request bodies specified in this document. | Update the request body. |
401 Unauthorized | The request does not contain a valid access token or that access token has expired. | Reauthenticate and obtain a fresh token. |
403 Forbidden | The request is accessing customer or profile data that the client is not allowed access to. | Update the request body. |
404 Not Found | The client is requesting an endpoint that does not exist. | Check your endpoint, and use an existing endpoint. |
405 Method Not Allowed | The client is using an HTTP verb that is not appropriate. | Use the HTTP verb listed for the API endpoint you’re using; typically POST or GET. See the specific endpoint documentation for details. |
415 Unsupported Media Type | The client has submitted a request body that is not JSON or is requesting a response that is not JSON | Correct the Accept and Content-Type headers to use jSON. |
429 Too Many Requests | The client is making requests too quickly or has exhausted the allowed requests in a month. | Slow down your requests. |
500 Internal Server Error | The server had an issue processing the request. | Retry the request. If this code persists, contact support. |
503 Service Unavailable | The server is overloaded and cannot process the request. | Retry the request. If this code persists, contact support. |
504 Gateway Timeout | The server was unable to produce a result in time. | Retry the request. If this code persists, contact support or decrease the scope of the request (smaller date ranges, less profiles, etc.). |
Response Headers
The following headers are returned with each response:
Header | Description | Sample Value |
---|---|---|
X-Sprout-Request-ID | Randomly generated UUID to trace a client request and response. Returned to you for debugging. | bedc387d-9b99-42ae-9887-cc15f9885d47 |
X-Sprout-API-Version | Major and minor version of the response | 1.1 |
X-Sprout-Server-Version | Server version, including the major, minor, and build number. The major and minor version reflect the latest available version of the API. | 1.1.3018 |
Response Body
Responses from the data API are JSON objects with the following format:
Key | Value |
---|---|
data |
JSON array containing the results of the API request (JSON objects for each message, dimensioned data, etc.) |
paging |
Optional JSON object describing the status of paging the data returned in the response. |
error |
Optional JSON string containing an error message in the event there is an issue with the request. |
Customer Metadata Endpoints
Customer Metadata endpoints are all HTTP GET endpoints. Use these to obtain information about the customer and profiles you have access to.
Client (Customer ID) Endpoint
GET /v1/metadata/client
This endpoint is used to obtain the customer ID you have access to.
Request Body - Client (Customer ID) Endpoint
No request body is necessary for this request.
Response Data - Client (Customer ID) Endpoint
The data array contains JSON objects of customer IDs you have access to. For example:
{
"data": [
{"customer_id": 687751}
]
}
Customer Profiles Endpoint
GET /v1/<customer ID>/metadata/customer
This endpoint is used to obtain the list of customer profile IDs you have access to.
Request Body - Customer Profiles Endpoint
No request body is necessary for this request.
Response Data - Customer Profiles Endpoint
The data array contains an array of JSON objects describing the social network profiles that are available to that client. The JSON object contains:
Key | Description | Example Value |
---|---|---|
customer_profile_id |
The customer profile ID used by Sprout to identify this social network profile. | 492 |
network_type |
The type of social network (c.f. Twitter, Facebook, Instagram, etc.) | twitter |
name |
The human-facing name of the social network profile | Sprout Social |
native_name |
The user name, screen name, page URL, etc. the social network uses to identify a unique profile. | sproutsocial |
native_id |
The ID used by the social network to identify a unique profile. | 42793960 |
groups |
An array of group IDs this profile belongs to. | [23598, 65245] |
An example response:
{
"data": [
{
"customer_profile_id": 492,
"network_type": "twitter",
"name": "Sprout Social",
"native_name": "sproutsocial",
"native_id": "42793960"
},
...
]
}
Customer Tags Endpoint
GET /v1/<customer ID>/metadata/customer/tags
This endpoint is used to obtain the list of message tags you created in Sprout. The response includes all active and archived tags, regardless of when the tag was created. Previously deleted tags are permanently removed from Sprout and are not included.
Request Body - Customer Tags Endpoint
No request body is necessary for this request.
Response Data - Customer Tags Endpoint
The data array contains an array of JSON objects describing the tags that are available. This includes all tags in a single response. There is no limit or pagination in the response. The JSON object contains:
Key | Description | Example Value |
---|---|---|
tag_id |
The ID used by Sprout to identify this message tag. | 321 |
any_group |
Whether or not this tag is available in any customer group | false |
active |
Whether this tag is active (or archived) in Sprout Social | true |
text |
The text of the tag | “Social Support” |
groups |
An array of the IDs of the groups this tag is available in | [206063] |
An example response:
{
"data": [
{
"tag_id": 321,
"any_group": false,
"active": true,
"text": "Social Support",
"groups": [206063]
},
...
]
}
Customer Groups Endpoint
GET /v1/<customer ID>/metadata/customer/groups
This endpoint is used to obtain the list of groups you created in Sprout.
Request Body - Customer Groups Endpoint
No request body is necessary for this request.
Response Data - Customer Groups Endpoint
The data array contains an array of JSON objects describing the groups that are available to you. The JSON object contains:
Key | Description | Example Value |
---|---|---|
group_id |
The ID used by Sprout to identify this group. | 1234 |
name |
The name of the group | “Sprout Social Team” |
An example response:
{
"data": [
{
"group_id": 1234,
"name": "Sprout Social Team"
},
...
]
}
Customer Users Endpoint
GET /v1/<customer ID>/metadata/customer/users
This endpoint is used to obtain the list of users that are active for your customer.
Request Body - Customer Groups Endpoint
No request body is necessary for this request.
Response Data - Customer Groups Endpoint
The data array contains an array of JSON objects describing the active users for your customer. The JSON object contains:
Key | Description | Example Value |
---|---|---|
id |
The ID used by Sprout to identify this user. | 1234 |
name |
The name of the user | “John Doe” |
An example response:
{
"data": [
{
"id": 1234,
"name": "John Doe"
},
...
]
}
Analytics Endpoints
Analytics endpoints are all HTTP POST endpoints. They provide access to your owned profile and post analytics data, including:
- Profile Analytics - profile activity broken down by day
- Post Analytics - message content, metadata and lifetime activity metrics
Overview
All requests to and responses from Analytics API endpoints have a similar structure.
Requests - Analytics Endpoints
The request body for an analytics API request is a JSON object with the following name/values pairs:
Key | Description | Example Value |
---|---|---|
filters |
Detailed filters used to filter the results by customer_profile_id , reporting_period (for profile metrics) and message created_time (for posts endpoint) |
Profile Endpoint: ["customer_profile_id.eq(1234, 5678)", “reporting_period.in(2018-01-01...2018-02-01)”] Posts Endpoint: ["customer_profile_id.eq(1234, 5678)", “created_time.in(2018-01-01...2018-02-01)”] |
metrics |
List of metrics to return in results; refer to the metrics section for post and profile metrics available for each social network type | [“impressions”, “likes”] |
page (optional) |
In paginated results, which 1-indexed page to return in the response. Pagination is based on default limits of 1000 results for the Profiles endpoint and 50 results for the Posts endpoint |
3 |
limit (optional) |
Specifies the max number of results per page in the response. Defaults to 1000 results for the Profiles endpoint and 50 results for the Posts endpoint. |
100 |
sort (optional) |
(Posts endpoint only) Sets the sort order for results, specified as a list of fields and directions ( asc or desc ) in the format <field>:<direction> . |
["created_time:asc"] |
timezone (optional) |
(Posts endpoint only) Time zone—from the ICANN time zone database—used for period values |
“America/Chicago” |
fields (optional) |
(Posts endpoint only) List of fields to return in results; if omitted, all fields are returned. Refer to the Message Fields section for full list of valid fields |
[“content_category”, “created_time”, “from.name”] |
Responses - Analytics Endpoints
Responses follow the standard data API response format:
data
This array contains the analytics data requested. See specific endpoints for additional details.
paging
This object specifies the state of paging for this response:
Key | Description | Example Value |
---|---|---|
current_page |
1-indexed page number of the response | 3 |
total_pages |
Total number of pages for the request | 20 |
A paging
object is always returned, including when the response contains all data in one page. You can rely on checking for current_page = total_pages
in order to know when you are at the end of the paging sequence.
Requesting a page greater than total_pages will return a HTTP 400 Bad Request response with a message describing the error.
Owned Profile Analytics Endpoint
POST /v1/<customer ID>/analytics/profiles
The profiles endpoint is used to query profile-level metrics for a given set of profiles.
Request Body - Owned Profile Analytics Endpoint
An example request:
{
"filters": [
"customer_profile_id.eq(1234, 5678, 9012)",
"reporting_period.in(2018-08-01...2018-10-01)"
],
"metrics": [
"impressions",
"reactions"
],
"page": 1
}
Response Data - Owned Profile Analytics Endpoint
An example response:
{
"data" : [
{
"dimensions": {
"reporting_period.by(day)": "2018-08-01",
"customer_profile_id": 1234
},
"metrics": {
"impressions": 3400,
"reactions": 12
}
},
{
"dimensions": {
"reporting_period.by(day)": "2018-08-01",
"customer_profile_id": 5678
},
"metrics": {
"impressions": 23423,
"reactions": 29
}
},
...
],
"paging": {
"current_page": 2,
"total_pages": 3
}
}
Profile Request Limits & Pagination
customer_profile_id
(filters): maximum of 100 profiles per requestreporting_period
(filters): maximum of 1 year per request- Pagination of response: pagination is based on 1000 results per response
Profile Time Zone
Profile daily activity uses the time zone of the native network. These time zones are the same that are used by native networks when grouping profile level activity.
Network | Timezone |
---|---|
UTC | |
PST/PDT | |
PST/PDT | |
UTC | |
YouTube | PST/PDT |
UTC | |
Tiktok | UTC |
Post Analytics Endpoint
POST /v1/<customer ID>/analytics/posts
The posts content endpoint queries for individual sent posts based on a filter criteria.
Request Body - Post Analytics Endpoint
An example request:
{
"fields": [
"created_time",
"perma_link",
"text",
"internal.tags.id",
"internal.sent_by.id",
"internal.sent_by.email",
"internal.sent_by.first_name",
"internal.sent_by.last_name"
],
"filters": [
"customer_profile_id.eq(1234, 5678, 9012)",
"created_time.in(2020-04-06T00:00:00..2020-04-19T23:59:59)"
],
"metrics": [
"lifetime.impressions",
"lifetime.reactions"
],
"timezone": "America/Chicago",
"page": 1
}
Response Data - Post Analytics Endpoint
An example response:
{
"data": [
{
"text": "Come by for a cold brew!",
"perma_link": "https://www.instagram.com/p/B-pIo1GFqyl/",
"metrics": {
"lifetime.impressions": 15,
"lifetime.reactions": 0
},
"created_time": "2020-04-06T14:27:03Z",
"internal": {
"tags": [
{"id": 111111},
{"id": 111112},
{"id": 111113}
],
"sent_by": {
"id": 1155555,
"email": "sprout.user@sproutsocial.com",
"first_name": "Sprout",
"last_name": "User"
}
},
...
],
"paging": {
"current_page": 1,
"total_pages": 3
}
}
Post Request Limits & Pagination
customer_profile_id
(filters): maximum of 100 profiles per request- Pagination of response: pagination is based on 50 messages per response
Messages Endpoint
POST /v1/<customer ID>/messages
The messages endpoint provides detailed data and metadata about your Sprout messages.
Requests - Messages Endpoint
The request body for a Messages request is a JSON object with the following name/values pairs:
Key | Description | Example |
---|---|---|
filters |
Refer to the Request Filters section below for details | ["group_id.eq(78910)", "customer_profile_id.eq(1234, 5678)", “created_time.in(2022-01-01..2022-02-01)”] |
fields (optional) |
List of fields to return in results. If omitted, all fields are returned. Refer to the Message Fields section for full list of valid fields | [“post_type”, “created_time”, “from.name”, "text"] |
limit (optional) |
Specifies the max number of results per page in the response Default: 50, Max: 100 |
10 |
timezone (optional) |
Time zone — from the ICANN time zone database — used for period values | “America/Chicago” |
page_cursor (optional) |
In paginated results, specifies the next page of data to return. Pagination for the messages endpoint only supports fetching the 'next' page of data. See Messages Request Limits & Pagination section for details | "page_cursor": "abc123==" |
sort (optional) |
Return results sorted by message created_time Default: descending |
["created_time:asc"] |
Request Filters - Messages Endpoint
All requests to the Messages Endpoint require a filter
parameter; the following table details the available filter
options, which includes both required and optional filters:
Filter Name | Description | Example Values |
---|---|---|
group_id |
Exactly one Group Id to retrieve messages for | "group_.eq(78910)" |
customer_profile_id |
One or more Profile Ids to retrieve messages for; these profiles must all belong to the requested group_id |
"customer_profile_id.eq(1234, 5678)" |
created_time |
Only return messages having a created_time within the provided date range; accepts either dates or datetimes |
“created_time.in(2022-01-01...2022-02-01)” |
action_last_update_time (optional) |
Only return messages which have a Sprout action (Reply, Tag, Like or Complete) having an action_time within the provided date range; accepts either dates or datetimes . This range cannot be chronologically before the created_time range |
“action_last_update_time.in(2022-01-01...2022-02-01)” |
post_type (optional) |
If provided, only messages of this type will be returned; defaults to all message types if omitted. Refer to the Post Types table for full list of valid post_types available for filtering | "post_type.eq(TWITTER_DIRECT_MESSAGE, INSTAGRAM_MEDIA)" |
tag_id (optional) |
If provided, only return messages with the specified tag_ids |
"tag_id.eq(123, 456, 789)" |
language_code (optional) |
If provided, only return messages with the specified language_codes |
"language_code.eq(en, es, fr)" |
Request Body - Messages Endpoint
Example request:
{
"filters": [
"group_id.eq(12345)",
"customer_profile_id.eq(1234, 5678, 9012)",
"created_time.in(2020-04-06T00:00:00..2020-04-19T23:59:59)",
"action_last_update_time.in(2020-08-06T00:00:00..2021-02-28T23:59:59)",
"post_type.eq(TWEET,FACEBOOK_POST,INSTAGRAM_DIRECT_MESSAGE)"
],
"fields": [
"network",
"activity_metadata.first_like.time_elapsed",
"created_time",
"post_category",
"post_type",
"perma_link",
"text",
"from",
"profile_guid",
"internal.tags.id",
"internal.sent_by.id",
"internal.sent_by.email"
],
"sort": ["created_time:desc"],
"limit": 50,
"timezone": "America/Chicago",
"page_cursor": "123abc=="
}
Responses - Messages Endpoint
Responses follow the standard Sprout API response format:
data
This array contains the message's data requested in JSON format.
paging
(optional)
This object, if present, indicates there are still more pages of data to be fetched, and provides a cursor pointing to the next page of data:
Key | Description | Example Value |
---|---|---|
next_cursor |
String of alphanumeric characters representing the next page of data, sorted by message created_time |
"abcd1234==" |
Messages Request Limits & Pagination
-
Pagination of response is based on the following request params:
limit
- number of messages returned per response (max: 100, default: 50)sort
- sort order of messages in response; sorted by messagecreated_time
(default: desc)
-
To paginate results: continuously fetch the "next" page of data, by updating the
page_cursor
parameter, until a response without apaging
object is returned -
Note: Unlike some other Sprout API Endpoints, index-based paging (e.g.
page: 4
) is not supported by the Messages Endpoint. While you can specify thesort
direction, you can only ever get the "next" page of data — you can't fetch the "previous" page -
A Request containing an invalid
page_cursor
will return a HTTP 400 Bad Request response with a message describing the error
Response Data - Messages Endpoint
Example response:
{
"data": [
{
"post_category": "POST",
"post_type": "INSTAGRAM_MEDIA",
"profile_guid": "placeholder",
"text": "placeholder",
"perma_link": "link here",
"network": "INSTAGRAM",
"internal": {
"tags": [
{
"id": 1234
},
{
"id": 5678
}
],
"sent_by": {
"id": 2066696,
"email": "___@sproutsocial.com",
"first_name": "placeholder",
"last_name": "placeholder"
}
},
"created_time": "2022-06-09T22:10:54Z"
},
...
],
"paging": {
"next_cursor": "456def=="
}
}
Metrics & Fields
Message Metadata
Message Fields
Key | Type | Network Availability | Notes |
---|---|---|---|
content_category |
STRING |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Unified categorization of the content. The hierarchy is album, video, photo, link, or text. |
created_time |
DATE |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
An iso8601 timestamp representing the publication date and time of the message. |
from |
MAP |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
A shorthand for requesting all of the following “from” nested fields. Represents the social network profile that published the message. |
from.guid |
STRING |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
The native ID of the authors' profile prefixed with a Sprout code that represents where the data was collected. |
from.name |
STRING |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
The display name of the author. |
from.profile_picture |
STRING |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
URL to the profile’s picture. |
from.screen_name |
STRING |
![]() ![]() ![]() ![]() ![]() |
Also commonly called "handle," this field is mutable on most networks, but not changed as often as the display name. |
guid |
STRING |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
The native ID of the message prefixed with a Sprout code that represents where this type of message is. |
customer_profile_id |
NUMBER |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
ID of the profile associated with this message. Corresponds to the customer_profile_id in the requested filters . |
internal |
MAP |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
A shorthand for requesting internal.tags.id and internal.sent_by.id . |
internal.tags.id |
ARRAY<NUMBER> |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Array of tag IDs this message is associated with. Includes active and archived tags. |
internal.sent_by.id |
NUMBER |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
ID of the team member that sent this message via Sprout. |
internal.sent_by.email |
STRING |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Email address of the team member that sent this message. |
internal.sent_by.first_name |
STRING |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
First name of the team member that sent this message. |
internal.sent_by.last_name |
STRING |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Last name of the team member that sent this message. |
sent |
BOOLEAN |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
(Posts endpoint only)If the message is sent by the requested profiles, true. Otherwise, the message is considered received by the requested profile(s) and returned false. |
post_type |
STRING |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Uniquely identifies the social network and type of message this is. Refer to the Post Types table for full list of valid post_types |
post_category |
STRING |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
A unified version of post_type , these names are not network specific. |
network |
STRING |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
The social network that the data came from (e.g. INSTAGRAM). |
perma_link |
STRING |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
URL to the message on the social network. |
inbox_permalink |
STRING |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
URL to the message thread in the Sprout Social Smart Inbox. |
profile_guid |
STRING |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
The ID of the profile being tracked prefixed with an Sprout code that represents where the data was collected. When the message was made by the profile being tracked, this field will be identical to from.guid. |
text |
STRING |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
The text in the body of the message. |
title |
STRING |
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Text that is separate from the usual body of the message, usually shown as a title for the message in the social network. |
clickthrough_link |
MAP |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Metadata about a link to another entity that appears on the message, e.g. when a Pinterest message contains a link to a different website. |
clickthrough_link.name |
STRING |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
|
clickthrough_link.long |
STRING |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
|
clickthrough_link.short |
STRING |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
|
hashtags |
ARRAY<STRING> |
![]() ![]() ![]() |
Array of hashtags associated with the message (does not include the "#" character). |
visual_media |
ARRAY<MAP> |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Array of media shared on the message, e.g. photos and videos. Where possible, contains URLs for the full media, a high resolution display image and a thumbnail image. |
pinterest.board_name |
STRING |
![]() |
(Posts endpoint only)The name of the collection where users save specific pins. |
activity_metadata |
ARRAY<MAP> |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
(Messages endpoint only)Contains information about the first of each Sprout Action(s) taken on a message, such as actor and timestamp. Depending on network limitations, this may include Reply, Tag, Complete and Like actions. |
Post Types
Note: Twitter has additional review and compliance requirements around exposing data through the Sprout Analytics API. Customers are required to undergo a brief Twitter review and approval process before being able to access their Twitter data through the Sprout Analytics API.
Twitter: Owned Profile Metrics
Metric | Key |
---|---|
Followers | lifetime_snapshot.followers_count |
Net Follower Growth | net_follower_growth |
Impressions | impressions |
Media Views | post_media_views |
Video Views | video_views |
Reactions | reactions |
Likes | likes |
@Replies | comments_count |
Retweets | shares_count |
Post Clicks (All) | post_content_clicks |
Post Link Clicks | post_link_clicks |
Other Post Clicks | post_content_clicks_other |
Post Media Clicks | post_media_clicks |
Post Hashtag Clicks | post_hashtag_clicks |
Post Detail Expand Clicks | post_detail_expand_clicks |
Profile Clicks | post_profile_clicks |
Other Engagements | engagements_other |
App Engagements | post_app_engagements |
App Install Attempts | post_app_installs |
App Opens | post_app_opens |
Posts Sent Count | posts_sent_count |
Posts Sent By Post Type | posts_sent_by_post_type |
Posts Sent By Content Type | posts_sent_by_content_type |
Twitter: Calculated Profile Metrics
The following metrics are derived from owned profile metrics:
- Followers = the last available
lifetime_snapshot.followers_count
metric - (Sprout’s default) Engagements = Likes + @Replies + Retweets + Post Link Clicks + Other Post Clicks + Other Engagements
- Engagement Rate (per Follower) = Engagements / Followers
- Engagement Rate (per Impression) = Engagements / Impressions
- Click-Through Rate = Post Link Clicks / Impressions
Twitter: Post Metrics
Metric | Key |
---|---|
Impressions | lifetime.impressions |
Media Views | lifetime.post_media_views |
Video Views | lifetime.video_views |
Reactions | lifetime.reactions |
Likes | lifetime.likes |
@Replies | lifetime.comments_count |
Retweets | lifetime.shares_count |
Post Clicks (All) | lifetime.post_content_clicks |
Post Link Clicks | lifetime.post_link_clicks |
Other Post Clicks | lifetime.post_content_clicks_other |
Post Media Clicks | lifetime.post_media_clicks |
Post Hashtag Clicks | lifetime.post_hashtag_clicks |
Post Detail Expand Clicks | lifetime.post_detail_expand_clicks |
Profile Clicks | lifetime.post_profile_clicks |
Other Engagements | lifetime.engagements_other |
Follows from Posts | lifetime.post_followers_gained |
Unfollows from Posts | lifetime.post_followers_lost |
App Engagements | lifetime.post_app_engagements |
App Install Attempts | lifetime.post_app_installs |
App Opens | lifetime.post_app_opens |
Twitter: Calculated Post Metrics
The following metrics are derived from post metrics:
- (Sprout’s default) Engagements = Likes + @Replies + Retweets + Post Link Clicks + Other Post Clicks + Other Engagements
- Engagement Rate (per Follower) = Engagements / Followers
- Engagement Rate (per Impression) = Engagements / Impressions
- Click-Through Rate = Post Link Clicks / Impressions
Facebook: Owned Profile Metrics
Metric | Key |
---|---|
Fans | lifetime_snapshot.followers_count |
Net Page Likes | net_follower_growth |
Page Likes | followers_gained |
Organic Page Likes | followers_gained_organic |
Paid Page Likes | followers_gained_paid |
Page Unlikes | followers_lost |
Impressions | impressions |
Organic Impressions | impressions_organic |
Viral Impressions | impressions_viral |
Non-viral Impressions | impressions_nonviral |
Paid Impressions | impressions_paid |
Page Tab Views | tab_views |
Logged In Page Tab Views | tab_views_login |
Logged Out Page Tab Views | tab_views_logout |
Post Impressions | post_impressions |
Organic Post Impressions | post_impressions_organic |
Viral Post Impressions | post_impressions_viral |
Non-viral Post Impressions | post_impressions_nonviral |
Paid Post Impressions | post_impressions_paid |
Reach | impressions_unique |
Organic Reach | impressions_organic_unique |
Viral Reach | impressions_viral_unique |
Non-viral Reach | impressions_nonviral_unique |
Paid Reach | impressions_paid_unique |
Page Views | profile_views |
Logged In Page Views | profile_views_login |
Logged Out Page Views | profile_views_logout |
Page Visitors | profile_views_login_unique |
Reactions | reactions |
Comments | comments_count |
Shares | shares_count |
Post Link Clicks | post_link_clicks |
Other Post Clicks | post_content_clicks_other |
Likes | likes |
Love Reactions | reactions_love |
Haha Reactions | reactions_haha |
Wow Reactions | reactions_wow |
Sad Reactions | reactions_sad |
Angry Reactions | reactions_angry |
Post Photo View Clicks | post_photo_view_clicks |
Post Video Play Clicks | post_video_play_clicks |
Page Actions | profile_actions |
Post Engagements | post_engagements |
Action Button Clicks | cta_clicks_login |
Answers | question_answers |
Offer Claims | offer_claims |
Other Positive Feedback | positive_feedback_other |
Event RSVPs | event_rsvps |
Place Check-ins | place_checkins |
Mobile Place Check-ins | place_checkins_mobile |
Page Content Activity | profile_content_activity |
Negative Feedback | negative_feedback |
Video Views | video_views |
Organic Video Views | video_views_organic |
Paid Video Views | video_views_paid |
Autoplay Video Views | video_views_autoplay |
Click to Play Video Views | video_views_click_to_play |
Replayed Video Views | video_views_repeat |
Video View Time | video_view_time |
Unique Video Views | video_views_unique |
Full Video Views | video_views_30s_complete |
Organic Full Video Views | video_views_30s_complete_organic |
Paid Full Video Views | video_views_30s_complete_paid |
Autoplay Full Video Views | video_views_30s_complete_autoplay |
Click to Play Full Video Views | video_views_30s_complete_click_to_play |
Replayed Full Video Views | video_views_30s_complete_repeat |
Unique Full Video Views | video_views_30s_complete_unique |
Partial Video Views | video_views_partial |
Organic Partial Video Views | video_views_partial_organic |
Paid Partial Video Views | video_views_partial_paid |
Autoplay Partial Video Views | video_views_partial_autoplay |
Click to Play Partial Video Views | video_views_partial_click_to_play |
Replayed Partial Video Views | video_views_partial_repeat |
10-Second Video Views | video_views_10s |
Organic 10-Second Video Views | video_views_10s_organic |
Paid 10-Second Video Views | video_views_10s_paid |
Autoplay 10-Second Video Views | video_views_10s_autoplay |
Click to Play 10-Second Video Views | video_views_10s_click_to_play |
Replayed 10-Second Video Views | video_views_10s_repeat |
Unique 10-Second Video Views | video_views_10s_unique |
Posts Sent Count | posts_sent_count |
Posts Sent By Post Type | posts_sent_by_post_type |
Posts Sent By Content Type | posts_sent_by_content_type |
Facebook: Calculated Profile Metrics
The following metrics are derived from owned profile metrics:
- Fans = the last available
lifetime_snapshot.followers_count
metric - (Sprout’s default) Engagements = Reactions + Comments + Shares + Post Link Clicks + Other Post Clicks
- Engagement Rate (per Follower) = Engagements / Followers
- Engagement Rate (per Impression) = Engagements / Impressions
- Click-Through Rate = Post Link Clicks / Impressions
Facebook: Post Metrics
Metric | Key |
---|---|
Impressions | lifetime.impressions |
Organic Impressions | lifetime.impressions_organic |
Viral Impressions | lifetime.impressions_viral |
Non-viral Impressions | lifetime.impressions_nonviral |
Paid Impressions | lifetime.impressions_paid |
Fan Impressions | lifetime.impressions_follower |
Fan Organic Impressions | lifetime.impressions_follower_organic |
Fan Paid Impressions | lifetime.impressions_follower_paid |
Non-fan Impressions | lifetime.impressions_nonfollower |
Non-fan Organic Impressions | lifetime.impressions_nonfollower_organic |
Non-fan Paid Impressions | lifetime.impressions_nonfollower_paid |
Reach | lifetime.impressions_unique |
Organic Reach | lifetime.impressions_organic_unique |
Viral Reach | lifetime.impressions_viral_unique |
Non-viral Reach | lifetime.impressions_nonviral_unique |
Paid Reach | lifetime.impressions_paid_unique |
Fan Reach | lifetime.impressions_follower_unique |
Fan Paid Reach | lifetime.impressions_follower_paid_unique |
Reactions | lifetime.reactions |
Likes | lifetime.likes |
Love Reactions | lifetime.reactions_love |
Haha Reactions | lifetime.reactions_haha |
Wow Reactions | lifetime.reactions_wow |
Sad Reactions | lifetime.reactions_sad |
Angry Reactions | lifetime.reactions_angry |
Comments | lifetime.comments_count |
Shares | lifetime.shares_count |
Answers | lifetime.question_answers |
Post Clicks (All) | lifetime.post_content_clicks |
Post Link Clicks | lifetime.post_link_clicks |
Post Photo View Clicks | lifetime.post_photo_view_clicks |
Post Video Play Clicks | lifetime.post_video_play_clicks |
Other Post Clicks | lifetime.post_content_clicks_other |
Negative Feedback | lifetime.negative_feedback |
Engaged Users | lifetime.engagements_unique |
Engaged Fans | lifetime.engagements_follower_unique |
Users Talking About This | lifetime.post_activity_unique |
Unique Reactions | lifetime.reactions_unique |
Unique Comments | lifetime.comments_count_unique |
Unique Shares | lifetime.shares_count_unique |
Unique Answers | lifetime.question_answers_unique |
Unique Post Clicks | lifetime.post_content_clicks_unique |
Unique Post Link Clicks | lifetime.post_link_clicks_unique |
Unique Post Photo View Clicks | lifetime.post_photo_view_clicks_unique |
Unique Post Video Play Clicks | lifetime.post_video_play_clicks_unique |
Unique Other Post Clicks | lifetime.post_other_clicks_unique |
Unique Negative Feedback | lifetime.negative_feedback_unique |
Video Length | video_length |
Video Views | lifetime.video_views |
Organic Video Views | lifetime.video_views_organic |
Paid Video Views | lifetime.video_views_paid |
Autoplay Video Views | lifetime.video_views_autoplay |
Click to Play Video Views | lifetime.video_views_click_to_play |
Sound on Video Views | lifetime.video_views_sound_on |
Sound off Video Views | lifetime.video_views_sound_off |
10-Second Video Views | lifetime.video_views_10s |
Organic 10-Second Video Views | lifetime.video_views_10s_organic |
Paid 10-Second Video Views | lifetime.video_views_10s_paid |
Autoplay 10-Second Video Views | lifetime.video_views_10s_autoplay |
Click to Play 10-Second Video Views | lifetime.video_views_10s_click_to_play |
Sound on 10-Second Video Views | lifetime.video_views_10s_sound_on |
Sound off 10-Second Video Views | lifetime.video_views_10s_sound_off |
Partial Video Views | lifetime.video_views_partial |
Organic Partial Video Views | lifetime.video_views_partial_organic |
Paid Partial Video Views | lifetime.video_views_partial_paid |
Autoplay Partial Video Views | lifetime.video_views_partial_autoplay |
Click to Play Partial Video Views | lifetime.video_views_partial_click_to_play |
Full Video Views | lifetime.video_views_30s_complete |
Organic Full Video Views | lifetime.video_views_30s_complete_organic |
Paid Full Video Views | lifetime.video_views_30s_complete_paid |
Autoplay Full Video Views | lifetime.video_views_30s_complete_autoplay |
Click to Play Full Video Views | lifetime.video_views_30s_complete_click_to_play |
95% Video Views | lifetime.video_views_p95 |
Organic 95% Video Views | lifetime.video_views_p95_organic |
Paid 95% Video Views | lifetime.video_views_p95_paid |
Unique Video Views | lifetime.video_views_unique |
Unique Organic Video Views | lifetime.video_views_organic_unique |
Unique Paid Video Views | lifetime.video_ |