Hey there, fellow JavaScript devs! Ready to dive into the world of Facebook Custom Audiences API? Let's get our hands dirty with some code and learn how to sync data for user-facing integrations. Buckle up!
Facebook's Custom Audiences API is a powerful tool for managing user data in your marketing efforts. When it comes to user-facing integrations, syncing this data efficiently is crucial. We'll explore how to read, write, and update custom audiences, all while keeping our code clean and performant.
Before we jump in, make sure you've got:
If you're scratching your head about these, check out Facebook's developer docs for a quick refresher.
Let's start by fetching existing audiences. Here's a quick example:
async function getCustomAudiences() { try { const response = await fetch( `https://graph.facebook.com/v13.0/act_<AD_ACCOUNT_ID>/customaudiences`, { headers: { Authorization: `Bearer ${ACCESS_TOKEN}` }, } ); const data = await response.json(); return data.data; } catch (error) { console.error('Error fetching custom audiences:', error); } }
Creating a new audience is just as straightforward. Check this out:
async function createCustomAudience(name, description) { try { const response = await fetch( `https://graph.facebook.com/v13.0/act_<AD_ACCOUNT_ID>/customaudiences`, { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${ACCESS_TOKEN}`, }, body: JSON.stringify({ name, description }), } ); const data = await response.json(); return data; } catch (error) { console.error('Error creating custom audience:', error); } }
Adding or removing users? We've got you covered:
async function updateCustomAudience(audienceId, users, operation = 'ADD') { try { const response = await fetch( `https://graph.facebook.com/v13.0/${audienceId}/users`, { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${ACCESS_TOKEN}`, }, body: JSON.stringify({ payload: { schema: ['EMAIL', 'PHONE'], data: users }, operation, }), } ); const data = await response.json(); return data; } catch (error) { console.error('Error updating custom audience:', error); } }
Privacy first! Always hash your user data before sending it to Facebook:
import crypto from 'crypto'; function hashData(data) { return crypto.createHash('sha256').update(data).digest('hex'); } const hashedUsers = users.map(user => [ hashData(user.email.toLowerCase()), hashData(user.phone.replace(/\D/g, '')), ]);
Webhooks are your friend for real-time updates. Here's a basic Express.js handler:
app.post('/webhook', (req, res) => { const { object, entry } = req.body; if (object === 'customaudience') { entry.forEach(({ changes }) => { changes.forEach(({ field, value }) => { console.log(`Audience ${field} changed:`, value); // Handle the change }); }); } res.sendStatus(200); });
Don't let those pesky rate limits get you down. Implement exponential backoff:
async function makeApiCall(fn, retries = 3) { for (let i = 0; i < retries; i++) { try { return await fn(); } catch (error) { if (error.code === 'RATE_LIMIT_EXCEEDED' && i < retries - 1) { await new Promise(resolve => setTimeout(resolve, 2 ** i * 1000)); } else { throw error; } } } }
And there you have it! You're now equipped to read, write, and sync data like a pro using the Facebook Custom Audiences API. Remember, the key to mastering this API is practice and staying up-to-date with Facebook's documentation.
Happy coding, and may your audiences be ever synced!