Retrieve social media analytics and use Ow.ly URL shortening via the Hootsuite API. Track post performance, engagement metrics, and click-through rates.
hootsuite-install-auth setupimport 'dotenv/config';
const TOKEN = process.env.HOOTSUITE_ACCESS_TOKEN!;
const BASE = 'https://platform.hootsuite.com/v1';
async function getOrganization() {
const response = await fetch(`${BASE}/me/organizations`, {
headers: { 'Authorization': `Bearer ${TOKEN}` },
});
const { data } = await response.json();
return data[0]; // Primary organization
}
async function shortenUrl(fullUrl: string) {
const response = await fetch(`${BASE}/shorteners/owly`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ url: fullUrl }),
});
const { data } = await response.json();
console.log(`${fullUrl} → ${data.shortUrl}`);
return data;
}
// Shorten multiple URLs
async function shortenBatch(urls: string[]) {
return Promise.all(urls.map(url => shortenUrl(url)));
}
async function getMessageAnalytics(messageId: string) {
const response = await fetch(`${BASE}/messages/${messageId}`, {
headers: { 'Authorization': `Bearer ${TOKEN}` },
});
const { data } = await response.json();
console.log(`Message: ${data.text?.substring(0, 50)}...`);
console.log(`State: ${data.state}`);
console.log(`Sent: ${data.sentAt}`);
return data;
}
// List sent messages and their performance
async function getSentMessages(profileId: string) {
const response = await fetch(
`${BASE}/messages?socialProfileIds=${profileId}&state=SENT&limit=20`,
{ headers: { 'Authorization': `Bearer ${TOKEN}` } },
);
const { data } = await response.json();
for (const msg of data) {
console.log(`[${msg.sentAt}] ${msg.text?.substring(0, 60)}`);
}
return data;
}
async function getProfileDetails(profileId: string) {
const response = await fetch(`${BASE}/socialProfiles/${profileId}`, {
headers: { 'Authorization': `Bearer ${TOKEN}` },
});
const { data } = await response.json();
console.log(`Profile: @${data.socialNetworkUsername}`);
console.log(`Network: ${data.type}`);
console.log(`ID: ${data.id}`);
return data;
}
| Error | Cause | Solution |
|---|---|---|
404 on message |
Message deleted or wrong ID | Verify message ID |
| No analytics data | Post too recent | Wait for engagement data (24-48h) |
| Ow.ly rate limited | Too many shortening requests | Batch and throttle |
For common errors, see hootsuite-common-errors.