curl -X GET \
"https://api.kardow.com/analytics" \
-H "x-api-key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"period": "30d",
"includeComparison": true
}'
curl -X GET \
"https://api.kardow.com/analytics" \
-H "x-api-key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"period": "30d",
"filters": {
"device": ["Desktop"],
"country": ["US", "GB"],
"source": ["Google", "LinkedIn"]
},
"includeComparison": true
}'
curl -X GET \
"https://api.kardow.com/analytics" \
-H "x-api-key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"period": "custom",
"dateRange": {
"from": "2024-01-01",
"to": "2024-01-31"
},
"includeComparison": true
}'
const apiKey = process.env.KARDOW_API_KEY;
const response = await fetch(
'https://api.kardow.com/analytics',
{
method: 'GET',
headers: {
'x-api-key': apiKey,
'Content-Type': 'application/json'
},
body: JSON.stringify({
period: '30d',
filters: {
device: ['Desktop'],
country: ['US', 'GB']
},
includeComparison: true
})
}
);
const data = await response.json();
console.log('Analytics:', data.data.metrics);
console.log('Comparison:', data.data.comparison);
import os
import requests
api_key = os.environ.get('KARDOW_API_KEY')
url = 'https://api.kardow.com/analytics'
headers = {
'x-api-key': api_key,
'Content-Type': 'application/json'
}
payload = {
'period': '30d',
'filters': {
'device': ['Desktop'],
'country': ['US', 'GB']
},
'includeComparison': True
}
response = requests.get(url, headers=headers, json=payload)
data = response.json()
print('Analytics:', data['data']['metrics'])
print('Comparison:', data['data']['comparison'])
<?php
$apiKey = getenv('KARDOW_API_KEY');
$url = 'https://api.kardow.com/analytics';
$payload = [
'period' => '30d',
'filters' => [
'device' => ['Desktop'],
'country' => ['US', 'GB']
],
'includeComparison' => true
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"x-api-key: $apiKey",
'Content-Type: application/json'
]);
curl_setopt($ch, GET, true);
curl_setopt($ch, CURLOPT_GETFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
print_r($data['data']['metrics']);
?>
{
"data": {
"metrics": {
"visitors": 1500,
"pageviews": 4200,
"bounce_rate": 45.2,
"visit_duration": 125
},
"comparison": {
"visitors": {
"value": 1500,
"change": 12.5
},
"pageviews": {
"value": 4200,
"change": 8.3
},
"bounce_rate": {
"value": 45.2,
"change": -5.2
},
"visit_duration": {
"value": 125,
"change": 3.8
}
},
"previousMetrics": {
"visitors": 1333,
"pageviews": 3878,
"bounce_rate": 47.7,
"visit_duration": 120
},
"timeseries": [
{
"date": "2024-01-01",
"visitors": 50,
"pageviews": 140,
"bounce_rate": 44.5,
"visit_duration": 128
}
],
"topPages": [
{
"name": "/companies/acme/jobs/software-engineer",
"visitors": 320,
"pageviews": 580,
"bounce_rate": 42.1,
"visit_duration": 135
}
],
"topSources": [
{
"name": "Google",
"visitors": 450,
"pageviews": 1200,
"bounce_rate": 38.5,
"visit_duration": 142
}
],
"topCountries": [
{
"code": "US",
"name": "United States",
"visitors": 650,
"pageviews": 1850
}
],
"devices": [
{
"name": "Desktop",
"visitors": 800,
"pageviews": 2200
}
],
"browsers": [
{
"name": "Chrome",
"visitors": 900,
"pageviews": 2500
}
],
"os": [
{
"name": "Windows",
"visitors": 600,
"pageviews": 1700
}
],
"topCompanies": [
{
"name": "Acme Inc",
"visitors": 450
}
],
"topJobs": [
{
"name": "Software Engineer",
"visitors": 320
}
]
},
"meta": {
"period": "30d",
"filters_applied": {
"device": ["Desktop"],
"country": ["US", "GB"]
},
"organization_domain": "acme.kardow.com"
}
}
{
"error": {
"message": "API key is required",
"code": "missing_api_key",
"details": "Please provide an API key in the x-api-key header",
"url": "https://kardow.featurebase.app/help/articles/api-documentation"
}
}
{
"error": {
"message": "Invalid parameters",
"code": "validation_error",
"details": [
{
"code": "invalid_enum_value",
"options": ["7d", "30d", "6mo", "12mo", "custom"],
"path": ["period"],
"message": "Invalid enum value. Expected '7d' | '30d' | '6mo' | '12mo' | 'custom'"
}
],
"url": "https://kardow.com/help/api/full-analytics"
}
}
{
"error": {
"message": "Missing required parameter",
"code": "missing_parameter",
"details": "dateRange is required when period is \"custom\"",
"url": "https://kardow.com/help/api/full-analytics"
}
}
Analytics
Get Site Analytics
Retrieve comprehensive analytics data with advanced filtering capabilities for your job board
POST
/
analytics
curl -X GET \
"https://api.kardow.com/analytics" \
-H "x-api-key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"period": "30d",
"includeComparison": true
}'
curl -X GET \
"https://api.kardow.com/analytics" \
-H "x-api-key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"period": "30d",
"filters": {
"device": ["Desktop"],
"country": ["US", "GB"],
"source": ["Google", "LinkedIn"]
},
"includeComparison": true
}'
curl -X GET \
"https://api.kardow.com/analytics" \
-H "x-api-key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"period": "custom",
"dateRange": {
"from": "2024-01-01",
"to": "2024-01-31"
},
"includeComparison": true
}'
const apiKey = process.env.KARDOW_API_KEY;
const response = await fetch(
'https://api.kardow.com/analytics',
{
method: 'GET',
headers: {
'x-api-key': apiKey,
'Content-Type': 'application/json'
},
body: JSON.stringify({
period: '30d',
filters: {
device: ['Desktop'],
country: ['US', 'GB']
},
includeComparison: true
})
}
);
const data = await response.json();
console.log('Analytics:', data.data.metrics);
console.log('Comparison:', data.data.comparison);
import os
import requests
api_key = os.environ.get('KARDOW_API_KEY')
url = 'https://api.kardow.com/analytics'
headers = {
'x-api-key': api_key,
'Content-Type': 'application/json'
}
payload = {
'period': '30d',
'filters': {
'device': ['Desktop'],
'country': ['US', 'GB']
},
'includeComparison': True
}
response = requests.get(url, headers=headers, json=payload)
data = response.json()
print('Analytics:', data['data']['metrics'])
print('Comparison:', data['data']['comparison'])
<?php
$apiKey = getenv('KARDOW_API_KEY');
$url = 'https://api.kardow.com/analytics';
$payload = [
'period' => '30d',
'filters' => [
'device' => ['Desktop'],
'country' => ['US', 'GB']
],
'includeComparison' => true
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"x-api-key: $apiKey",
'Content-Type: application/json'
]);
curl_setopt($ch, GET, true);
curl_setopt($ch, CURLOPT_GETFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
print_r($data['data']['metrics']);
?>
{
"data": {
"metrics": {
"visitors": 1500,
"pageviews": 4200,
"bounce_rate": 45.2,
"visit_duration": 125
},
"comparison": {
"visitors": {
"value": 1500,
"change": 12.5
},
"pageviews": {
"value": 4200,
"change": 8.3
},
"bounce_rate": {
"value": 45.2,
"change": -5.2
},
"visit_duration": {
"value": 125,
"change": 3.8
}
},
"previousMetrics": {
"visitors": 1333,
"pageviews": 3878,
"bounce_rate": 47.7,
"visit_duration": 120
},
"timeseries": [
{
"date": "2024-01-01",
"visitors": 50,
"pageviews": 140,
"bounce_rate": 44.5,
"visit_duration": 128
}
],
"topPages": [
{
"name": "/companies/acme/jobs/software-engineer",
"visitors": 320,
"pageviews": 580,
"bounce_rate": 42.1,
"visit_duration": 135
}
],
"topSources": [
{
"name": "Google",
"visitors": 450,
"pageviews": 1200,
"bounce_rate": 38.5,
"visit_duration": 142
}
],
"topCountries": [
{
"code": "US",
"name": "United States",
"visitors": 650,
"pageviews": 1850
}
],
"devices": [
{
"name": "Desktop",
"visitors": 800,
"pageviews": 2200
}
],
"browsers": [
{
"name": "Chrome",
"visitors": 900,
"pageviews": 2500
}
],
"os": [
{
"name": "Windows",
"visitors": 600,
"pageviews": 1700
}
],
"topCompanies": [
{
"name": "Acme Inc",
"visitors": 450
}
],
"topJobs": [
{
"name": "Software Engineer",
"visitors": 320
}
]
},
"meta": {
"period": "30d",
"filters_applied": {
"device": ["Desktop"],
"country": ["US", "GB"]
},
"organization_domain": "acme.kardow.com"
}
}
{
"error": {
"message": "API key is required",
"code": "missing_api_key",
"details": "Please provide an API key in the x-api-key header",
"url": "https://kardow.featurebase.app/help/articles/api-documentation"
}
}
{
"error": {
"message": "Invalid parameters",
"code": "validation_error",
"details": [
{
"code": "invalid_enum_value",
"options": ["7d", "30d", "6mo", "12mo", "custom"],
"path": ["period"],
"message": "Invalid enum value. Expected '7d' | '30d' | '6mo' | '12mo' | 'custom'"
}
],
"url": "https://kardow.com/help/api/full-analytics"
}
}
{
"error": {
"message": "Missing required parameter",
"code": "missing_parameter",
"details": "dateRange is required when period is \"custom\"",
"url": "https://kardow.com/help/api/full-analytics"
}
}
Authentication
This endpoint requires API key authentication. Include your API key in the request header:x-api-key: your-api-key-here
You can generate API keys from your organization settings in the Kardow dashboard under Settings > API Keys.
Request Body
Time period for analytics data. Must be one of:
7d- Last 7 days30d- Last 30 days6mo- Last 6 months12mo- Last 12 monthscustom- Custom date range (requiresdateRangeparameter)
Advanced filtering options for analytics data
Show filters properties
Show filters properties
Filter by device typesOptions:
Desktop, Mobile, TabletExample: ["Desktop", "Mobile"]Filter by browserOptions:
Chrome, Safari, Firefox, Edge, etc.Example: ["Chrome", "Safari"]Filter by operating systemOptions:
Windows, macOS, Linux, iOS, Android, etc.Example: ["Windows", "macOS"]Filter by traffic sourceOptions:
Google, Direct, LinkedIn, Twitter, etc.Example: ["Google", "LinkedIn"]Filter by country (ISO 3166-1 alpha-2 codes)Example:
["US", "GB", "CA"]Filter by UTM source parameterExample:
["newsletter", "social"]Filter by UTM medium parameterExample:
["email", "cpc"]Filter by UTM campaign parameterExample:
["summer_2024", "product_launch"]Include comparison with the previous period. When enabled, the response includes percentage changes for all metrics compared to the equivalent previous time period.
Response
Comprehensive analytics data
Show data properties
Show data properties
Comparison with previous period (only if
includeComparison is true)Metrics from the previous period (only if
includeComparison is true)Daily breakdown of metrics over the selected period
[
{
"date": "2024-01-01",
"visitors": 150,
"pageviews": 420,
"bounce_rate": 45.2,
"visit_duration": 125
}
]
Most visited pages
[
{
"name": "/companies/acme/jobs/software-engineer",
"visitors": 320,
"pageviews": 580,
"bounce_rate": 42.1,
"visit_duration": 135
}
]
Top traffic sources
[
{
"name": "Google",
"visitors": 450,
"pageviews": 1200,
"bounce_rate": 38.5,
"visit_duration": 142
}
]
Visitors by country
[
{
"code": "US",
"name": "United States",
"visitors": 650,
"pageviews": 1850
}
]
Breakdown by device type
[
{
"name": "Desktop",
"visitors": 800,
"pageviews": 2200
},
{
"name": "Mobile",
"visitors": 700,
"pageviews": 2000
}
]
Breakdown by browser
[
{
"name": "Chrome",
"visitors": 900,
"pageviews": 2500
}
]
Breakdown by operating system
[
{
"name": "Windows",
"visitors": 600,
"pageviews": 1700
}
]
Most visited company pages
[
{
"name": "Acme Inc",
"visitors": 450
}
]
Most visited job postings
[
{
"name": "Software Engineer",
"visitors": 320
}
]
curl -X GET \
"https://api.kardow.com/analytics" \
-H "x-api-key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"period": "30d",
"includeComparison": true
}'
curl -X GET \
"https://api.kardow.com/analytics" \
-H "x-api-key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"period": "30d",
"filters": {
"device": ["Desktop"],
"country": ["US", "GB"],
"source": ["Google", "LinkedIn"]
},
"includeComparison": true
}'
curl -X GET \
"https://api.kardow.com/analytics" \
-H "x-api-key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"period": "custom",
"dateRange": {
"from": "2024-01-01",
"to": "2024-01-31"
},
"includeComparison": true
}'
const apiKey = process.env.KARDOW_API_KEY;
const response = await fetch(
'https://api.kardow.com/analytics',
{
method: 'GET',
headers: {
'x-api-key': apiKey,
'Content-Type': 'application/json'
},
body: JSON.stringify({
period: '30d',
filters: {
device: ['Desktop'],
country: ['US', 'GB']
},
includeComparison: true
})
}
);
const data = await response.json();
console.log('Analytics:', data.data.metrics);
console.log('Comparison:', data.data.comparison);
import os
import requests
api_key = os.environ.get('KARDOW_API_KEY')
url = 'https://api.kardow.com/analytics'
headers = {
'x-api-key': api_key,
'Content-Type': 'application/json'
}
payload = {
'period': '30d',
'filters': {
'device': ['Desktop'],
'country': ['US', 'GB']
},
'includeComparison': True
}
response = requests.get(url, headers=headers, json=payload)
data = response.json()
print('Analytics:', data['data']['metrics'])
print('Comparison:', data['data']['comparison'])
<?php
$apiKey = getenv('KARDOW_API_KEY');
$url = 'https://api.kardow.com/analytics';
$payload = [
'period' => '30d',
'filters' => [
'device' => ['Desktop'],
'country' => ['US', 'GB']
],
'includeComparison' => true
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"x-api-key: $apiKey",
'Content-Type: application/json'
]);
curl_setopt($ch, GET, true);
curl_setopt($ch, CURLOPT_GETFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
print_r($data['data']['metrics']);
?>
{
"data": {
"metrics": {
"visitors": 1500,
"pageviews": 4200,
"bounce_rate": 45.2,
"visit_duration": 125
},
"comparison": {
"visitors": {
"value": 1500,
"change": 12.5
},
"pageviews": {
"value": 4200,
"change": 8.3
},
"bounce_rate": {
"value": 45.2,
"change": -5.2
},
"visit_duration": {
"value": 125,
"change": 3.8
}
},
"previousMetrics": {
"visitors": 1333,
"pageviews": 3878,
"bounce_rate": 47.7,
"visit_duration": 120
},
"timeseries": [
{
"date": "2024-01-01",
"visitors": 50,
"pageviews": 140,
"bounce_rate": 44.5,
"visit_duration": 128
}
],
"topPages": [
{
"name": "/companies/acme/jobs/software-engineer",
"visitors": 320,
"pageviews": 580,
"bounce_rate": 42.1,
"visit_duration": 135
}
],
"topSources": [
{
"name": "Google",
"visitors": 450,
"pageviews": 1200,
"bounce_rate": 38.5,
"visit_duration": 142
}
],
"topCountries": [
{
"code": "US",
"name": "United States",
"visitors": 650,
"pageviews": 1850
}
],
"devices": [
{
"name": "Desktop",
"visitors": 800,
"pageviews": 2200
}
],
"browsers": [
{
"name": "Chrome",
"visitors": 900,
"pageviews": 2500
}
],
"os": [
{
"name": "Windows",
"visitors": 600,
"pageviews": 1700
}
],
"topCompanies": [
{
"name": "Acme Inc",
"visitors": 450
}
],
"topJobs": [
{
"name": "Software Engineer",
"visitors": 320
}
]
},
"meta": {
"period": "30d",
"filters_applied": {
"device": ["Desktop"],
"country": ["US", "GB"]
},
"organization_domain": "acme.kardow.com"
}
}
{
"error": {
"message": "API key is required",
"code": "missing_api_key",
"details": "Please provide an API key in the x-api-key header",
"url": "https://kardow.featurebase.app/help/articles/api-documentation"
}
}
{
"error": {
"message": "Invalid parameters",
"code": "validation_error",
"details": [
{
"code": "invalid_enum_value",
"options": ["7d", "30d", "6mo", "12mo", "custom"],
"path": ["period"],
"message": "Invalid enum value. Expected '7d' | '30d' | '6mo' | '12mo' | 'custom'"
}
],
"url": "https://kardow.com/help/api/full-analytics"
}
}
{
"error": {
"message": "Missing required parameter",
"code": "missing_parameter",
"details": "dateRange is required when period is \"custom\"",
"url": "https://kardow.com/help/api/full-analytics"
}
}
Filtering Capabilities
The full analytics endpoint supports extensive filtering to help you analyze specific segments of your traffic:Device Filtering
Filter analytics by device type to understand how users access your job board:{
"filters": {
"device": ["Desktop", "Mobile"]
}
}
Geographic Filtering
Analyze traffic from specific countries using ISO country codes:{
"filters": {
"country": ["US", "GB", "CA", "AU"]
}
}
Traffic Source Filtering
Understand which sources drive the most traffic:{
"filters": {
"source": ["Google", "LinkedIn", "Direct"]
}
}
UTM Campaign Tracking
Track specific marketing campaigns:{
"filters": {
"utm_source": ["newsletter"],
"utm_medium": ["email"],
"utm_campaign": ["summer_2024"]
}
}
Combined Filters
Combine multiple filters for advanced segmentation:{
"filters": {
"device": ["Desktop"],
"country": ["US"],
"source": ["Google"],
"browser": ["Chrome"]
}
}
Understanding Comparison Data
WhenincludeComparison is enabled, the API automatically calculates period-over-period changes:
{
"comparison": {
"visitors": {
"value": 1500, // Current period visitors
"change": 12.5 // +12.5% increase from previous period
}
},
"previousMetrics": {
"visitors": 1333 // Previous period visitors
}
}
- For preset periods (7d, 30d, etc.), the previous period is the equivalent time span immediately before the current period
- For custom date ranges, the previous period is calculated based on the duration of your custom range
- Positive
changevalues indicate growth - Negative
changevalues indicate decline
Use Cases
Performance Dashboard
Build a comprehensive performance dashboard:async function buildAnalyticsDashboard() {
const analytics = await fetch('https://api.kardow.com/analytics', {
method: 'GET',
headers: {
'x-api-key': apiKey,
'Content-Type': 'application/json'
},
body: JSON.stringify({
period: '30d',
includeComparison: true
})
}).then(r => r.json());
return {
overview: {
visitors: analytics.data.metrics.visitors,
trend: analytics.data.comparison.visitors.change,
pageviews: analytics.data.metrics.pageviews,
avgDuration: analytics.data.metrics.visit_duration
},
charts: {
timeseries: analytics.data.timeseries,
geography: analytics.data.topCountries,
devices: analytics.data.devices
},
topPerformers: {
jobs: analytics.data.topJobs,
companies: analytics.data.topCompanies,
pages: analytics.data.topPages
}
};
}
Mobile vs Desktop Analysis
Compare performance across device types:async function analyzeDevicePerformance() {
const [desktop, mobile] = await Promise.all([
fetch('https://api.kardow.com/analytics', {
method: 'GET',
body: JSON.stringify({
period: '30d',
filters: { device: ['Desktop'] }
})
}).then(r => r.json()),
fetch('https://api.kardow.com/analytics', {
method: 'GET',
body: JSON.stringify({
period: '30d',
filters: { device: ['Mobile'] }
})
}).then(r => r.json())
]);
return {
desktop: {
visitors: desktop.data.metrics.visitors,
bounceRate: desktop.data.metrics.bounce_rate,
duration: desktop.data.metrics.visit_duration
},
mobile: {
visitors: mobile.data.metrics.visitors,
bounceRate: mobile.data.metrics.bounce_rate,
duration: mobile.data.metrics.visit_duration
}
};
}
Geographic Performance Report
Analyze which countries drive the most engagement:async function analyzeGeographicPerformance(targetCountries) {
const results = await Promise.all(
targetCountries.map(country =>
fetch('https://api.kardow.com/analytics', {
method: 'GET',
body: JSON.stringify({
period: '30d',
filters: { country: [country] }
})
}).then(r => r.json())
)
);
return targetCountries.map((country, i) => ({
country,
visitors: results[i].data.metrics.visitors,
engagement: results[i].data.metrics.visit_duration,
bounceRate: results[i].data.metrics.bounce_rate
}));
}
Marketing Campaign Analysis
Track UTM campaign performance:async function analyzeCampaign(campaignName) {
const analytics = await fetch('https://api.kardow.com/analytics', {
method: 'GET',
body: JSON.stringify({
period: '30d',
filters: {
utm_campaign: [campaignName]
},
includeComparison: true
})
}).then(r => r.json());
return {
campaign: campaignName,
visitors: analytics.data.metrics.visitors,
conversions: analytics.data.topJobs.length,
sources: analytics.data.topSources,
trend: analytics.data.comparison.visitors.change
};
}
Best Practices
Cache Results
Cache analytics data for 5-10 minutes to reduce API calls and improve performance.
Use Filters Wisely
Combine filters to get specific insights, but avoid over-filtering which may result in insufficient data.
Monitor Comparisons
Enable comparisons to track trends and identify performance changes over time.
Batch Requests
If you need multiple filtered views, consider making parallel requests for better performance.
Rate Limits
This endpoint is subject to rate limits:
- 50 requests per minute per API key
- 5 concurrent requests maximum
Related Endpoints
Job Visitors
Get visitor counts for specific jobs
List Jobs
Retrieve your job listings
Authorizations
API key for authentication. Get yours from Settings > API Keys in the Kardow dashboard.
Body
application/json
Time period for analytics data
Available options:
7d, 30d, 6mo, 12mo, custom Custom date range (required if period is 'custom')
Show child attributes
Show child attributes
Advanced filtering options
Show child attributes
Show child attributes
Include period-over-period comparison (value + percentage change per metric) in data.comparison. Defaults to true.
Was this page helpful?
⌘I