Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Execute Hootsuite secondary workflow: Core Workflow B. Use when implementing secondary use case, or complementing primary workflow. Trigger with phrases like "hootsuite secondary workflow", "secondary task with hootsuite".
.claude/skills/jeremylongshore-hootsuite-core-workflow-b/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -10% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -6% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 7% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -28% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -3% | 0% |
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 setuptypescriptimport '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 }
typescriptasync 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))); }
typescriptasync 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; }
typescriptasync 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.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-11 | pass→pass | 17,604 | 10,549 | -40% | 1 | 1 | 0% | 2,143 | 1,952 | -9% | 0 | 0 | — |
case-01 | fail→pass | 19,622 | 12,710 | -35% | 1 | 1 | 0% | 2,932 | 2,650 | -10% | 0 | 0 | — |
case-02 | fail→pass | 17,480 | 12,303 | -30% | 1 | 1 | 0% | 2,538 | 2,389 | -6% | 0 | 0 | — |
case-03 | fail→pass | 40,357 | 13,201 | -67% | 1 | 1 | 0% | 2,502 | 2,684 | +7% | 0 | 0 | — |
case-04 | fail→fail | 22,649 | 19,270 | -15% | 1 | 1 | 0% | 2,740 | 3,273 | +19% | 0 | 0 | — |
case-05 | fail→fail | 13,480 | 17,867 | +33% | 1 | 1 | 0% | 2,717 | 3,664 | +35% | 0 | 0 | — |
case-06 | fail→fail | 22,718 | 19,643 | -14% | 1 | 1 | 0% | 3,749 | 3,954 | +5% | 0 | 0 | — |
case-07 | pass→fail | 21,103 | 14,651 | -31% | 1 | 1 | 0% | 3,224 | 2,940 | -9% | 0 | 0 | — |
case-08 | fail→pass | 16,349 | 2,629 | -84% | 1 | 1 | 0% | 1,946 | 1,410 | -28% | 0 | 0 | — |
case-09 | fail→pass | 11,599 | 10,744 | -7% | 1 | 1 | 0% | 2,110 | 2,041 | -3% | 0 | 0 | — |
case-10 | pass→pass | 9,542 | 9,556 | +0% | 1 | 1 | 0% | 1,908 | 1,780 | -7% | 0 | 0 | — |
case-12 | pass→pass | 11,497 | 11,916 | +4% | 1 | 1 | 0% | 1,978 | 2,168 | +10% | 0 | 0 | — |
case-13 | fail→pass | 19,026 | 12,988 | -32% | 1 | 1 | 0% | 2,320 | 2,786 | +20% | 0 | 0 | — |
case-14 | pass→pass | 11,107 | 7,853 | -29% | 1 | 1 | 0% | 1,070 | 1,422 | +33% | 0 | 0 | — |
case-15 | fail→pass | 12,175 | 2,950 | -76% | 1 | 1 | 0% | 1,224 | 1,536 | +25% | 0 | 0 | — |
case-16 | fail→pass | 23,535 | 15,210 | -35% | 1 | 1 | 0% | 3,763 | 3,088 | -18% | 0 | 0 | — |
case-17 | pass→pass | 8,887 | 2,985 | -66% | 1 | 1 | 0% | 1,628 | 1,511 | -7% | 0 | 0 | — |
case-18 | pass→pass | 2,872 | 6,618 | +130% | 1 | 1 | 0% | 566 | 1,191 | +110% | 0 | 0 | — |
case-19 | fail→pass | 9,139 | 7,885 | -14% | 1 | 1 | 0% | 1,447 | 1,280 | -12% | 0 | 0 | — |
case-20 | fail→pass | 15,016 | 8,622 | -43% | 1 | 1 | 0% | 1,626 | 1,563 | -4% | 0 | 0 | — |
case-21 | pass→pass | 20,040 | 7,731 | -61% | 1 | 1 | 0% | 2,108 | 1,432 | -32% | 0 | 0 | — |
case-22 | fail→pass | 12,292 | 7,568 | -38% | 1 | 1 | 0% | 1,272 | 1,402 | +10% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +45 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.