Profile Statistics
Get detailed analytics available for a profile, focusing on performance, audience behavior, and overall activity. It covers key engagement and traffic metrics such as media views, watch time, unique viewers, and profile visits, along with aggregated totals and time-based breakdowns. The data is designed to give clear insight into how users interact with content and how that behavior evolves over time, making it easier to identify trends, monitor growth, and build reporting or automation on top of reliable analytics.
- Media Views
- Average Media Engagement Time
- Total Media Engagement Time
- Unique Media Viewers
- Profile Visits
- Unique Profile Visitors
- Media Traffic Sources
- Profile Visits Sources
- Top FYP Tags
- Top Media (Last 30 Days)
Get Started
All requests to the Fansly API require an API Key. See the Authentication page for details.
Path Parameters
Query Parameters
You can specify a time range or period for the analytics data.
curl -X GET "https://v1.apifansly.com/api/fansly/{accountId}/analytics/profilestats" \
-H "x-api-key: YOUR_API_KEY"fetch("https://v1.apifansly.com/api/fansly/{accountId}/analytics/profilestats", {
method: "GET",
headers: {
"x-api-key": "YOUR_API_KEY"
}
})import requests
url = "https://v1.apifansly.com/api/fansly/{accountId}/analytics/profilestats"
headers = {"x-api-key": "YOUR_API_KEY"}
response = requests.get(url, headers=headers)
print(response.json())import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://v1.apifansly.com/api/fansly/{accountId}/analytics/profilestats"))
.header("x-api-key", "YOUR_API_KEY")
.GET()
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();using System.Net.Http;
using System.Threading.Tasks;
var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY");
var response = await client.GetAsync("https://v1.apifansly.com/api/fansly/{accountId}/analytics/profilestats");
var responseString = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseString);package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "https://v1.apifansly.com/api/fansly/{accountId}/analytics/profilestats"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("x-api-key", "YOUR_API_KEY")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}Response
{
"statusCode": 200,
"message": "Success",
"data": {
"status_code": 200,
"data": {
"success": true,
"response": {
"dataset": {
"period": 86400000,
"dateBefore": 1772668800000,
"dateAfter": 1770076800000,
"datapointLimit": 100,
"datapoints": [
{
"timestamp": 1772668800000,
"stats": [
{
"type": 1,
"views": 1,
"previewViews": 0,
"interactionTime": 1507,
"previewInteractionTime": 0,
"uniqueViewers": 1,
"previewUniqueViewers": 0,
"videoViews": 0,
"totalVideoPercentWatched": 0,
"previewVideoViews": 0,
"previewTotalVideoPercentWatched": 0
}
]
}
],
"topMediaOffers": [
{
"mediaOfferId": "XXxxxxxxxxxxxxxxxxxx",
"mediaOfferBundleId": "0",
"views": 1,
"previewViews": 0,
"interactionTime": 1507,
"previewInteractionTime": 0
}
],
"topFypMediaOffers": [],
"topFypTags": [],
"profileDatapoints": [
{
"timestamp": 1772668800000,
"stats": [
{
"type": 10000,
"views": 2,
"interactionTime": 11661,
"uniqueViewers": 2
},
{
"type": 10001,
"views": 8,
"interactionTime": 0,
"uniqueViewers": 3
}
]
},
{
"stats": [],
"timestamp": 1770249600000
}
]
},
"aggregationData": {
"accountMedia": [
{
"id": "XXxxxxxxxxxxxxxxxxxx",
"accountId": "XXxxxxxxxxxxxxxxxxxx",
"mediaId": "XXxxxxxxxxxxxxxxxxxx",
"previewId": null,
"permissionFlags": 8,
"price": 0,
"createdAt": 1772754564,
"deletedAt": null,
"deleted": false,
"permissions": {
"permissionFlags": [
{
"id": "XXxxxxxxxxxxxxxxxxxx",
"accountMediaId": "XXxxxxxxxxxxxxxxxxxx",
"type": 0,
"flags": 9,
"price": 1000,
"metadata": "{\"1\":\"{\\\"price\\\":1000}\"}",
"validAfter": null,
"validBefore": null,
"verificationFlags": 9,
"verificationMetadata": "{}"
}
],
"accountPermissionFlags": {
"flags": 255,
"metadata": "{}"
}
},
"bundles": [],
"likeCount": 0,
"whitelist": [
{
"accountId": "XXxxxxxxxxxxxxxxxxxx",
"permissionFlags": 0
}
],
"media": {
"id": "XXxxxxxxxxxxxxxxxxxx",
"type": 1,
"status": 1,
"accountId": "XXxxxxxxxxxxxxxxxxxx",
"mimetype": "image/jpeg",
"flags": 134,
"filename": "[filename].jpeg",
"location": "/[accountId]/[mediaId].jpeg",
"width": 226,
"height": 225,
"metadata": "{\"dominant\":{\"r\":8,\"g\":8,\"b\":8},\"resolutionMode\":1}",
"updatedAt": 1770037715,
"createdAt": 1770037714,
"variants": [
{
"id": "XXxxxxxxxxxxxxxxxxxx",
"type": 3,
"status": 1,
"mimetype": "image/jpeg",
"flags": 0,
"filename": "[filename]_blur.jpeg",
"location": "/[accountId]/[variantId].jpeg",
"width": 226,
"height": 225,
"metadata": "{\"resolutionMode\":1}",
"updatedAt": 1770037715,
"locations": [
{
"locationId": "1",
"location": "https://cdn3.fansly.com/[signed-cdn-url]"
}
]
}
],
"variantHash": {},
"locations": [
{
"locationId": "1",
"location": "https://cdn3.fansly.com/[signed-cdn-url]"
}
]
},
"saleStats": {
"sales": 1,
"total": 800,
"pending": 0
},
"purchased": true,
"whitelisted": true,
"accountPermissionFlags": 255,
"access": true
}
],
"accountMediaBundles": [],
"tags": [],
"creatorMediaOfferLocations": []
}
}
}
},
"timestamp": "2026-03-18T03:30:44.048Z"
}Response Fields
Media Engagement Time-Series
| Field | Type | Description |
|---|---|---|
timestamp | number | Unix timestamp (ms) marking the start of this datapoint's period |
stats | array | Array of stat objects (views, interaction time, unique viewers) segmented by traffic source type |
Calculating Average Engagement Time: To compute average engagement time per viewer, divide interactionTime by uniqueViewers. Interaction time is reported in milliseconds — divide by 1000 to convert to seconds.
Profile Visit Time-Series
| Field | Type | Description |
|---|---|---|
timestamp | number | Unix timestamp (ms) marking the start of this datapoint's period |
stats | array | Array of stat objects (views, interaction time, unique viewers) segmented by traffic source type |
Stat Type Reference
The type field in the arrays above identifies where traffic originated.
| Type Code | Source | Context |
|---|---|---|
1 | Direct / Timeline | Media viewed directly from the creator's timeline or post feed |
10000 | Direct / Timeline | Profile visited directly or from the timeline |
10001 | External / Other | Profile visited from an external link, referral, or undifferentiated source |
Top Components
| Field | Type | Description |
|---|---|---|
dataset.topMediaOffers | array | Top-performing individual media offer items sorted by total views |
dataset.topFypMediaOffers | array | Top media offers that received traffic from the For You Page (FYP) |
dataset.topFypTags | array | Top content tags that drove FYP discovery traffic |
aggregationData.accountMedia | array | Full metadata (thumbnails, pricing, CDN URLs, permissions) for media referenced in the analytics results |