[F12] Active Ad Account Closing UPDATE 29/07/2025
console.log("Copyright maxvia88.com - Ads solution");
//update tự thêm quyền khi không đủ quyền
//update load nhiều hơn 1000 tkqc
//ae coppy nhớ ghi nguồn. thanks ae chúc ae mùa tút bội thu
const delay = 0;
let access_token;
let fb_dtsg2 = require("DTSGInitialData").token || document.querySelector('[name="fb_dtsg"]').value;
let uid = require("CurrentUserInitialData").USER_ID || [removed].match(/c_user=(\d+)/)[1];
try {
access_token = require("WebApiApplication").getAccessToken();
} catch (error) {}
if (!access_token) {
alert(`Please go to https://adsmanager.facebook.com and try again`);
window.location.href = "https://adsmanager.facebook.com/adsmanager/manage/campaigns?act=";
}
main();
async function main() {
console.log(`🚀 Bắt đầu lấy danh sách tài khoản quảng cáo...`);
const { success, data, error } = await fetchAdAccounts();
if (!success) {
console.log("❌ Lỗi khi lấy tài khoản:", error);
alert("Không lấy được danh sách tài khoản!");
return;
}
await processAdAccounts(data);
}
async function fetchAdAccounts() {
let allAccounts = [];
let url = `https://graph.facebook.com/v19.0/${uid}/adaccounts?access_token=${access_token}&pretty=1&fields=account_status,created_time,owner,owner_business,name,adtrust_dsl,currency,userpermissions.user(${uid})%7Brole%7D&limit=1000`;
let loadCount = 0;
try {
while (url) {
loadCount++;
console.log(`🔄 Đang tải lần ${loadCount} (tối đa 300 tài khoản/lần)...`);
const response = await fetch(url, { method: 'GET', credentials: 'include' });
const data = await response.json();
if (data && data.data) {
const filtered = data.data.filter(item => !item.owner_business);
allAccounts = allAccounts.concat(filtered);
}
url = data && data.paging && data.paging.next ? data.paging.next : null;
}
console.log(`📊 Tổng số tài khoản: ${allAccounts.length}`);
console.log("🆔 Danh sách ID:\n" + allAccounts.map(item => `${item.id.replace("act_", "")}|${item.adtrust_dsl} ${item.currency}|(${item.account_status})${item.name}|${item.created_time}`).join('\n'));
return { success: true, data: allAccounts };
} catch (error) {
return { success: false, error };
}
}
async function processAdAccounts(accounts) {
let successCount = 0;
for (let i = 0; i < accounts.length; i++) {
const acc = accounts[i];
const businessID = acc.id.replace("act_", "");
// if (acc.userpermissions && acc.userpermissions.data && acc.userpermissions.data[0].role !== "ADMIN") {
// var ok = await addpermission(businessID, acc.owner);
// if (ok.status){
// console.log(`✅ ${i + 1}/${accounts.length} act_${businessID}| -> add permission success`);
// }else{
// console.log(`❌ ${i + 1}/${accounts.length} act_${businessID}| -> add permission error: ${ok.error}`);
// }
// await delayMs(delay * 1000);
// }
if (acc.account_status === 100 || acc.account_status === 101) {
const ok = await reactivateAdAccount(businessID, i, accounts.length);
if (ok) successCount++;
await delayMs(delay * 1000);
}
}
console.log(`✅ Done! Đã kích hoạt thành công ${successCount}/${accounts.length} tài khoản.\nmaxvia88.com - Ads solution`);
alert(`Active success ${successCount}/${accounts.length} \nmaxvia88.com - Ads solution`);
window.open("https://www.facebook.com/ads/manager/accounts/?act=", "_blank");
}
async function reactivateAdAccount(businessID, index, total) {
const url = `https://adsmanager.facebook.com/api/graphql/?_callFlowletID=0&_triggerFlowletID=78266`;
try {
const response = await fetch(url, {
method: 'POST',
body: buildRequestBody(businessID),
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
});
const responseText = await response.text();
if (responseText.includes('status":"ADMARKET_ACCOUNT_STATUS_ACTIVE')) {
console.log(`🎉 ${index + 1}/${total} ACTIVE act_${businessID}| -> success`);
return true;
} else {
console.log(`❌ ${index + 1}/${total} ACTIVE act_${businessID}| -> Error: ${responseText}`);
return false;
}
} catch (error) {
console.log(`⚠️ ${index + 1}/${total} act_${businessID}| -> Error: ${error}`);
return false;
}
}
async function addpermission(adAccountId, business) {
const rawJson = {
input: {
business_id: business,
payment_legacy_account_id: adAccountId,
actor_id: uid,
client_mutation_id: "3"
}
};
const encodedJson = encodeURIComponent(JSON.stringify(rawJson));
const url = `https://graph.facebook.com/graphql?method=post&locale=en_US&pretty=false&format=json&fb_api_req_friendly_name=useBillingSelfGrantManageAdAccountMutation&doc_id=24037132059206200&fb_api_caller_class=RelayModern&server_timestamps=true&variables=${encodedJson}&access_token=${access_token}`;
try {
const response = await fetch(url, {
method: 'GET',
credentials: 'include'
});
const data = await response.json();
const billingWritePermission = data?.data?.grant_manage_ad_account?.ad_account?.viewer_permissions?.billing_write;
if (billingWritePermission) {
return { status: true, error: null };
} else {
return { status: false, error: data };
}
} catch (err) {
return { status: false, error: err };
}
}
function buildRequestBody(businessID) {
return `av=${uid}&__usid=6-Tskqef5m5416h%3APskqefx164ljb2%3A1-Askqea7pchdsm-RV%3D6%3AF%3D&__aaid=${businessID}&__user=${uid}&__a=1&__req=88&__hs=19998.BP%3Aads_manager_pkg.2.0..0.0&dpr=1&__ccg=UNKNOWN&__rev=1016987598&__s=z2tt9o%3Alkfjeh%3A8vmk3x&__hsi=7421175297378821716&__dyn=7AgSXgWGgWEjgDBxmSudg9omoiyoK6FVpkihG5Xx2m2q3K2KmeGqKi5axeqaScCCG225pojACjyocuF98SmqnK7GzUuwDxq4EOezoK26UKbC-mdwTxOESegGbwgEmK9y8Gdz8hyUuxqt1eiUO4EgCyku4oS4EWfGUhwyg9p44889EScxyu6UGq13yHGmmUTxJe9LgbeWG9DDl0zlBwyzp8KUV2U8oK1IxO4VAcKmieyp8BlBUK2O4UOi3Kdx29wgojKbUO1Wxu4GBwkEuz478shECumbz8KiewwBK68eF9UhK1vDyojyUix92UtgKi3a6Ex0RyQcKazQ3G5EbpEtzA6Sax248GUgz98hAy8tKU-4U-UG7F8a898vhojCx6EO489UW5ohwZAxK4U-dwMxeayEiwAgCmq6UCQubxu3ydDxG8wRyK4UoLzokGp5yrz8C9wFjQfyoaoym9yA4Ekx24oK4Ehzawwy9pEHyU8Uiwg8KawrVV-i782bByUeoQwox3UO364GJe2q3KfzFLxny9onxDwBwXx67HxtBxO64uWg-26q2au5onADzEHDUyEkjByo4a9AwHxq5kiUarx5e8wAAAVQEhyeucyEy3aQ48B5wPDBw&__csr=&__comet_req=25&fb_dtsg=${fb_dtsg2}&jazoest=25353&lsd=_dtDtv84z9OIgGn5IXOdW2&__spin_r=1016987598&__spin_b=trunk&__spin_t=1727877021&__jssesw=1&qpl_active_flow_ids=270206671%2C270211726%2C270213183&fb_api_caller_class=RelayModern&fb_api_req_friendly_name=useBillingReactivateAdAccountMutation&variables=%7B%22input%22%3A%7B%22billable_account_payment_legacy_account_id%22%3A%22${businessID}%22%2C%22logging_data%22%3A%7B%22logging_counter%22%3A22%2C%22logging_id%22%3A%22559255213%22%7D%2C%22upl_logging_data%22%3A%7B%22context%22%3A%22billingaccountinfo%22%2C%22entry_point%22%3A%22power_editor%22%2C%22external_flow_id%22%3A%22%22%2C%22target_name%22%3A%22BillingReactivateAdAccountMutation%22%2C%22user_session_id%22%3A%22upl_1727876994352_7d1de259-07b1-4107-8ddf-e616f492eac6%22%2C%22wizard_config_name%22%3A%22REACTIVATE_AD_ACCOUNT%22%2C%22wizard_name%22%3A%22REACTIVATE_AD_ACCOUNT%22%2C%22wizard_screen_name%22%3A%22reactivate_ad_account_state_display%22%2C%22wizard_session_id%22%3A%22upl_wizard_1727876994352_902bd8bd-c035-4924-9f33-94b00c9a5b20%22%2C%22wizard_state_name%22%3A%22reactivate_ad_account_state_display%22%7D%2C%22actor_id%22%3A%22${uid}%22%2C%22client_mutation_id%22%3A%227%22%7D%7D&server_timestamps=true&doc_id=9984888131552276&fb_api_analytics_tags=%5B%22qpl_active_flow_ids%3D270206671%2C270211726%2C270213183%22%5D`;
}
function delayMs(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
Public Last updated: 2025-08-26 08:42:06 AM