Documentazione

Configurazione degli annunci

Riferimento completo del CLI

Questo è il riferimento completo del CLI di Ads Uploader. Per un'introduzione e una guida per iniziare, consulta Configurazione tramite CLI.

Comandi

Autenticazione

ComandoCosa fa
ads loginEsegue l'autenticazione tramite browser (apre il browser predefinito)
ads logoutCancella le credenziali memorizzate
ads whoamiMostra l'utente attualmente connesso
ads configMostra la configurazione (account, URL API, percorso delle credenziali)
ComandoCosa fa
ads accountsElenca tutti gli account pubblicitari collegati al tuo account Meta
ads account <id>Imposta un account pubblicitario predefinito per i comandi futuri
ads pagesElenca le Pagine Facebook con cui puoi fare pubblicità, incluso eventuale account Instagram collegato, da usare con le sostituzioni di profilo
ads targeting:search "Austin" --type cityTrova le chiavi città per il targeting del gruppo di inserzioni
ads targeting:search "90210" --type zipTrova le chiavi CAP / codice postale per il targeting del gruppo di inserzioni
ads targeting:search "advertising" --type detailedTrova ID e tipi di targeting dettagliato
ads campaignsElenca le campagne attive
ads campaigns --status allInclude le campagne in pausa e archiviate
ads campaigns --search "text"Filtra le campagne per nome
ads campaign <id>Mostra i gruppi di inserzioni all'interno di una campagna
ads adsets --campaign <id>Elenca i gruppi di inserzioni in una campagna (supporta --search, --status)
ads adset <id>Mostra gli annunci all'interno di un gruppo di inserzioni
ads ad <id>Visualizza i dettagli completi dell'annuncio, incluse le impostazioni del creativo
ads presetsElenca i tuoi preset API salvati
ads presets <id>Mostra i dettagli di un preset specifico
ads presets:save --from-ad <adId> --name "Preset Name"Salva un annuncio esistente come preset API
ads text-presetsElenca i tuoi preset di testo salvati
ads text-presets <id>Mostra i dettagli di un preset di testo specifico
ads uploadsElenca i caricamenti recenti
ads uploads <batchId>Mostra i dettagli del caricamento (file, varianti, hash)

Caricamento media

ComandoCosa fa
ads upload <inputs...>Carica percorsi locali e URL HTTPS pubblici sul tuo account pubblicitario
ads upload ./directory/Carica un'intera directory
ads upload:drive <folderUrl>Importa una cartella pubblica di Google Drive come job in background

Gli argomenti HTTPS, inclusi i link pubblici ai file di Google Drive, vengono rilevati automaticamente. Puoi combinare percorsi locali e URL: i file locali vengono caricati per primi, poi il server importa gli URL nello stesso batch affinché il raggruppamento funzioni per tutti gli input. Le cartelle pubbliche di Drive devono essere condivise come Anyone with the link (Viewer).

I file locali vengono caricati in parallelo e i guasti di rete transitori vengono riprovati automaticamente con backoff. Le importazioni da URL e cartelle Drive usano pipeline di file parallele con parallelismo limitato in un job in background, mentre il CLI mostra un contatore completati/totale e ogni file attivo. Raramente è necessario modificare questi flag, ma sono disponibili:

Flag di caricamentoDescrizione
--concurrency <n>Numero di file caricati in parallelo, 1-6 (predefinito: 4). I video di grandi dimensioni vengono limitati automaticamente per rimanere entro la memoria.
--upload-timeout <ms>Timeout di caricamento per file (predefinito: 120000)
--api-timeout <ms>Timeout della richiesta API in millisecondi (predefinito: 60000)

Creazione annunci

ComandoCosa fa
ads create spec.jsonCrea annunci da un file di specifica
ads create:preview spec.jsonEsecuzione di prova che mostra cosa verrebbe creato
ads create:interactiveProcedura guidata (accetta tutti i flag di creazione)

Gestione job

ComandoCosa fa
ads jobs <jobId>Controlla lo stato di un job
ads jobs <jobId> --followMostra in tempo reale gli aggiornamenti di avanzamento
ads jobs cancel <jobId>Annulla un job in esecuzione

Flag di creazione

Questi flag si applicano a ads create, ads create:preview e ads create:interactive. Possono essere usati al posto di un file di specifica o insieme a esso.

FlagDescrizione
--account <id>Sostituisce l'account pubblicitario predefinito
--preset <id>Usa un preset API salvato (alternativa al file di specifica)
--text-preset <id>Carica un preset di testo salvato
--copy-from <adId>Copia le impostazioni da un annuncio esistente
--upload <batchId>Specifica l'ID del caricamento
--status <PAUSED|ACTIVE>Imposta lo stato dell'annuncio (predefinito: ACTIVE)
--pause-at <level>Livello di pausa: ad (predefinito), adSet o campaign
--daily-budget <amount>Sostituisce il budget giornaliero per gruppo di inserzioni (unità di valuta, es. 50 per 50 $)
--bid-amount <amount>Sostituisce l'offerta/limite di costo per gruppo di inserzioni (unità di valuta)
--minimum-roas <ratio>Sostituisce l'obiettivo ROAS minimo per gruppo di inserzioni (es. 1.5)
--campaign-daily-budget <amount>Imposta un budget giornaliero per la campagna CBO in unità di valuta intere. Si esclude a vicenda con il budget totale; ometti entrambi per ereditare il budget della campagna di origine.
--campaign-lifetime-budget <amount>Imposta un budget totale per la campagna CBO in unità di valuta intere. Si esclude a vicenda con il budget giornaliero; ometti entrambi per ereditare il budget della campagna di origine.
--adset-min-spend <amount>Imposta la spesa minima del gruppo di inserzioni con CBO in unità di valuta intere; 0 rimuove il limite ereditato dal gruppo di inserzioni di origine.
--adset-max-spend <amount>Imposta la spesa massima del gruppo di inserzioni con CBO in unità di valuta intere; 0 rimuove il limite ereditato dal gruppo di inserzioni di origine.
--adset-min-spend-pct <5-100>Imposta la spesa minima del gruppo di inserzioni come percentuale del budget della campagna, a incrementi del 5%. Funziona anche con una campagna CBO esistente; si esclude a vicenda con --adset-min-spend.
--adset-max-spend-pct <5-100>Imposta la spesa massima del gruppo di inserzioni come percentuale del budget della campagna, a incrementi del 5%. Funziona anche con una campagna CBO esistente; si esclude a vicenda con --adset-max-spend.
--location <ISO>Raggiungi un paese tramite il codice ISO di due lettere. Ripeti il flag per più paesi.
--age-min <n>Età minima, da 13 a 65
--age-max <n>Età massima, da 13 a 65 (65 significa 65+)
--gender <gender>all, men o women. all rimuove una restrizione di genere ereditata dal gruppo di inserzioni di origine.
--ai-disclosureDichiara volontariamente i contenuti creativi generati con l'IA (trasparenza di Meta sui contenuti IA). Disattivato per impostazione predefinita.
--page <id>Usa questa Pagina Facebook invece di quella del template (vedi Opzioni di profilo)
--instagram <id>Usa questo account Instagram invece di quello del template
--use-page-identityUsa la Pagina Facebook come identità Instagram; non può essere combinato con --instagram
--threads <id>Usa questo profilo Threads invece di quello del template
--text-file <path>Carica la configurazione del testo da un file JSON
--expandedMostra i valori completi di titolo, testo principale e descrizione nelle anteprime

Flag di navigazione

Questi flag sono disponibili su campaigns, adsets, adset e campaign:

FlagDescrizione
--status <status>active (predefinito) o all
--inactiveAbbreviazione di --status all (su campaigns)
--search <text>Filtra per nome (su campaigns, adsets)

Ricerca targeting

Il targeting per città e il targeting dettagliato usano identificatori Meta, non nomi. Cerca tramite Ads Uploader per ottenere valori pronti da incollare in una specifica:

ads targeting:search "Austin" --type city
ads targeting:search "90210" --type zip
ads targeting:search "advertising" --type detailed
FlagDescrizione
--type <type>Obbligatorio. city restituisce valori targeting.cities[].key; zip restituisce valori targeting.zips[].key; detailed restituisce voci per targeting.detailedTargetingGroups.
--account <id>Sostituisce l'account pubblicitario predefinito configurato
--limit <n>Restituisce da 1 a 25 risultati
--jsonRestituisce risultati strutturati pronti da incollare

I risultati del targeting dettagliato includono id, name, type, un intervallo di dimensione del pubblico e il percorso della categoria. Il type identifica la categoria di targeting dettagliato, come interests, behaviors, work_employers o work_positions. Cerca sempre questi identificatori; non indovinarli mai.

Flag di dettaglio

Questi flag sono disponibili su ad:

FlagDescrizione
--expandedMostra i valori completi di titolo, testo principale e descrizione

Flag comuni

FlagDescrizione
--account <id>Sostituisce l'account pubblicitario predefinito per qualsiasi comando
--jsonRestituisce JSON grezzo (disponibile sulla maggior parte dei comandi, pensato per lo scripting)

Formato del file di specifica

Il file di specifica JSON controlla ogni aspetto della creazione degli annunci. Fornisci una sorgente template (adPresetId o copyFromAd) più uploadId, oppure mediaItems catturati con un mediaHash Facebook per ogni immagine e mediaId per ogni video. Gli annunci standard, carosello, flessibili e a posizionamento necessitano anche di thumbnailHash; i video Multi Media usano il loro URL di miniatura pubblico catturato.

Specifica minima

{
  "adPresetId": "your_preset_id",
  "uploadId": "batch_abc123"
}

Esempio completo

{
  "adPresetId": "preset_id_here",
  "uploadId": "batch_abc123",
  "adSet": {
    "name": "My New Ad Set",
    "dailyBudget": 50
  },
  "adNamePattern": "{filename}",
  "texts": {
    "perAd": {
      "hero.jpg": {
        "headlines": ["Main Headline"],
        "bodies": ["Ad copy here."],
        "descriptions": ["Short description"],
        "cta": "SHOP_NOW",
        "link": "https://example.com/landing"
      }
    }
  },
  "creativeEnhancements": "none",
  "options": {
    "status": "PAUSED",
    "pauseAt": "adSet"
  }
}

Sorgente template

Ti serve una di queste per indicare al CLI quale configurazione dell'annuncio usare come base.

CampoDescrizione
adPresetIdL'ID di un preset API salvato. Blocca la campagna, il gruppo di inserzioni e la configurazione dell'annuncio.
copyFromAdUn ID annuncio Facebook da cui copiare le impostazioni.

Quando usi copyFromAd, fornisci il caricamento, oppure lancia un build web salvato le cui immagini catturate hanno mediaHash e i cui video hanno mediaId. Puoi facoltativamente impostare la campagna e il gruppo di inserzioni:

{
  "copyFromAd": "120233848667930472",
  "uploadId": "batch_abc123",
  "campaign": { "id": "120233848666410472" },
  "adSet": { "id": "120233848666620472" }
}

Per trovare l'ID annuncio giusto, naviga nel tuo account: ads campaigns poi ads campaign <id> poi ads adset <id> poi ads ad <id>.

Opzioni di profilo

Per impostazione predefinita, i nuovi annunci ereditano la Pagina Facebook, l'account Instagram e il profilo Threads dall'annuncio template o dal preset. È lo stesso controllo Opzioni di profilo disponibile tramite il pannello Predefiniti nell'applicazione web. Sostituisci ognuno di essi con un blocco profile (o con i flag --page / --instagram / --use-page-identity / --threads, che hanno precedenza sul file di specifica):

{
  "copyFromAd": "120233848667930472",
  "uploadId": "batch_abc123",
  "profile": {
    "pageId": "123456789012345",
    "instagramId": "17841400000000000",
    "threadsId": "987654321098765"
  }
}

Esegui ads pages per elencare gli ID delle Pagine che puoi usare, insieme all'account Instagram collegato a ciascuna Pagina.

Se sostituisci solo la Pagina, Ads Uploader usa automaticamente il suo account Instagram collegato. Se non c'è nessun account Instagram collegato, usa la Pagina Facebook come identità Instagram. Threads viene comunque reimpostato perché potrebbe appartenere alla vecchia Pagina; impostalo esplicitamente quando serve.

Per una scelta esplicita dell'identità della Pagina, usa --use-page-identity oppure imposta "useFacebookPage": true dentro profile. Non combinarlo con --instagram o instagramId. Puoi anche cambiare solo il profilo Instagram o Threads senza toccare la Pagina, impostando solo quei campi.

Per i lanci multi-campagna, assegna le identità in modo indipendente con profile.campaigns. Assegna a ciascuna sostituzione la chiave della campagna corrispondente tramite id (consigliato) o tramite un nome campagna univoco:

{
  "campaign": {
    "mode": "duplicate",
    "campaigns": [
      { "id": "prospecting", "name": "Prospecting" },
      { "id": "retargeting", "name": "Retargeting" }
    ]
  },
  "profile": {
    "campaigns": {
      "prospecting": { "pageId": "page_1", "instagramId": "ig_1", "threadsId": null },
      "retargeting": { "pageId": "page_2", "useFacebookPage": true, "threadsId": "threads_2" }
    }
  }
}

Ogni chiave di profile.campaigns deve corrispondere a una campagna in campaign.campaigns; le chiavi non corrispondenti o ambigue vengono rifiutate prima del lancio.

Struttura della campagna

Per impostazione predefinita, gli annunci vanno nella campagna dell'annuncio template. Puoi creare una nuova campagna fornendo campaign.name.

Per le modalità multi-campagna, usa campaign.mode con un array campaigns:

{
  "campaign": {
    "mode": "duplicate",
    "campaigns": [
      { "name": "Campaign A" },
      { "name": "Campaign B" }
    ]
  }
}
ModalitàComportamento
"single"Predefinita. Una sola campagna.
"duplicate"Tutti i media vengono duplicati in ogni campagna.
"split"I media vengono divisi equamente tra le campagne.

Modalità dei gruppi di inserzioni

Per impostazione predefinita, gli annunci vanno nel gruppo di inserzioni esistente dell'annuncio template. Le seguenti modalità ti danno il controllo su come gli annunci vengono distribuiti tra i gruppi di inserzioni.

Crea un nuovo gruppo di inserzioni:

{ "adSet": { "name": "My Ad Set" } }

Usa un gruppo di inserzioni esistente tramite ID:

{ "adSet": { "id": "120233848666620472" } }

Un gruppo di inserzioni per ogni file caricato:

{ "adSet": { "mode": "perUpload" } }

Raggruppamento automatico in gruppi di inserzioni di dimensione fissa:

{ "adSet": { "mode": "autoGroup", "adsPerAdSet": 5 } }

Gruppi personalizzati con pieno controllo su quali file vanno dove:

{
  "adSet": {
    "groups": [
      { "name": "Images - April 10", "media": ["hero.jpg", "banner.jpg"] },
      { "name": "Videos - April 10", "media": ["promo.mp4"] }
    ]
  }
}

Pattern di denominazione dei gruppi di inserzioni per le modalità multi-gruppo:

{ "adSet": { "mode": "perUpload", "namePattern": "Ad Set {index:01}" } }

Il raggruppamento per varianti raggruppa gli annunci per identificatore di variazione nello stesso gruppo di inserzioni:

{ "adSet": { "mode": "autoGroup", "groupVariations": true, "variationIdentifier": "-" } }

Sostituzione di budget e offerta

Sostituisci il budget giornaliero e/o l'importo dell'offerta sui nuovi gruppi di inserzioni. I valori sono nelle unità di valuta del tuo account (es. 50 per 50 $ o 50 euro).

dailyBudget e bidAmount usano le unità di valuta dell'account. minimumRoas è un rapporto, quindi 1.5 significa un obiettivo ROAS di 1,5x.

  • Campagne ABO (il budget è sul gruppo di inserzioni): combina dailyBudget con bidAmount per le strategie con limite di offerta/costo, oppure con minimumRoas per LOWEST_COST_WITH_MIN_ROAS.
  • Campagne CBO (il budget è sulla campagna): non impostare dailyBudget sul gruppo di inserzioni. Imposta campaign.dailyBudget o campaign.lifetimeBudget (si escludono a vicenda) per sostituire il budget della campagna di origine, oppure ometti entrambi per ereditarlo. I limiti di spesa minima e massima del gruppo di inserzioni possono essere importi interi o percentuali dal 5 al 100% del budget della campagna (a incrementi del 5%); le percentuali funzionano anche con una campagna CBO esistente. Imposta bidAmount o minimumRoas sul gruppo di inserzioni quando la sua strategia di origine usa quel controllo.

bidAmount e minimumRoas si escludono a vicenda perché appartengono a strategie di offerta diverse.

{ "adSet": { "dailyBudget": 50 } }
{ "adSet": { "bidAmount": 5 } }
{ "adSet": { "minimumRoas": 1.5 } }
{ "adSet": { "dailyBudget": 50, "bidAmount": 5 } }

Disponibili anche come flag del CLI: --daily-budget 50, --bid-amount 5, --minimum-roas 1.5, --campaign-daily-budget 100, --campaign-lifetime-budget 1000, --adset-min-spend 20, --adset-max-spend 80, --adset-min-spend-pct 20 e --adset-max-spend-pct 80.

Ad Set Targeting

Il targeting si applica ai nuovi gruppi di inserzioni. Ometti il blocco targeting di primo livello per ereditare invariato il pubblico del gruppo di inserzioni di origine. Qualsiasi modalità può usare adSet.targetingPerAdSet, con chiavi come in texts.perAdset: nome finale del gruppo di inserzioni, ID del gruppo di inserzioni, o campaign::key per evitare collisioni. La modalità personalizzata supporta anche adSet.groups[].targeting. La precedenza è targetingPerAdSet, poi groups[].targeting, poi il valore predefinito del build, poi il pubblico sorgente. Il targeting per singolo gruppo di inserzioni è disponibile solo via specifica, perché i flag del CLI non possono indirizzare un gruppo di inserzioni pianificato specifico.

Con più campagne, la copia di un gruppo di inserzioni in ciascuna campagna viene targettizzata separatamente; usa "Campaign name::Ad set name" come chiave per indirizzare una copia specifica.

{
  "targeting": {
    "countries": ["US"],
    "cities": [
      {
        "key": "2525495",
        "name": "Austin",
        "region": "Texas",
        "countryCode": "US",
        "radius": 25,
        "distance_unit": "mile"
      }
    ],
    "zips": [
      {
        "key": "US:90210",
        "name": "90210",
        "region": "California",
        "countryCode": "US"
      }
    ],
    "selectionVersion": 4,
    "ageSelected": true,
    "ageMin": 21,
    "ageMax": 55,
    "genderSelected": true,
    "genders": "women",
    "detailedTargetingSelected": true,
    "detailedTargetingGroups": [[
      {
        "id": "112002898811624",
        "name": "Advertising agency",
        "type": "work_employers"
      }
    ]]
  }
}
{
  "targeting": { "countries": ["US"], "ageMin": 21, "ageMax": 55 },
  "adSet": {
    "mode": "perUpload",
    "namePattern": "Ad Set {index:01}",
    "targetingPerAdSet": {
      "Ad Set 02": { "countries": ["CA"], "genders": "women" },
      "Ad Set 01": { "countries": ["GB"] }
    }
  }
}

Per la modalità personalizzata, groups[].targeting resta valido e mantiene la sovrascrittura accanto al suo gruppo di media:

{
  "adSet": {
    "mode": "custom",
    "groups": [{
      "name": "Canada Women",
      "media": ["canada.jpg"],
      "targeting": { "countries": ["CA"], "genders": "women" }
    }]
  }
}

Usa ads targeting:search per trovare la key della città (tipo city), la key del codice postale come US:90210 (tipo zip), e id, name e type di ogni selezione dettagliata (tipo detailed). Ometti paesi, città e codici postali per ereditare le località di origine. Paesi, città e codici postali vengono combinati come alternative, quindi aggiungere Austin o un codice postale a countries: ["US"] continua a raggiungere tutti gli Stati Uniti; ometti i paesi per raggiungere solo la città o il codice postale. I codici postali non hanno raggio.

Configurazione del testo

Il testo comune applica la stessa copia a tutti gli annunci:

{
  "texts": {
    "common": {
      "headlines": ["Headline 1", "Headline 2"],
      "bodies": ["Primary text"],
      "descriptions": ["Description"]
    },
    "strategy": "flexible"
  }
}

Il testo per annuncio ti permette di impostare una copia unica per ogni file:

{
  "texts": {
    "perAd": {
      "hero.jpg": {
        "headlines": ["Hero Headline"],
        "bodies": ["Hero copy"],
        "descriptions": ["Hero desc"],
        "cta": "LEARN_MORE",
        "link": "https://example.com/hero",
        "urlTags": "utm_content=hero"
      },
      "banner.jpg": {
        "headlines": ["Banner Headline"],
        "bodies": ["Banner copy"]
      }
    }
  }
}

Le chiavi per annuncio sono nomi di file (non percorsi completi). Ogni voce supporta: headlines, bodies, descriptions, cta, link, displayUrl, urlTags. I campi che non specifichi ereditano dall'annuncio template.

Il testo per gruppo di inserzioni applica un unico blocco di testo a ogni annuncio in un gruppo di inserzioni di destinazione. Usa un nome/ID di gruppo di inserzioni semplice quando è univoco, oppure una voce campaign::key quando lo stesso nome di gruppo compare in più campagne:

{
  "texts": {
    "perAdset": {
      "Prospecting::prospecting_set": {
        "headlines": ["Prospecting headline"],
        "bodies": ["Prospecting copy"],
        "descriptions": ["Prospecting description"],
        "cta": "SHOP_NOW",
        "link": "https://example.com/prospecting",
        "displayUrl": "example.com/prospecting",
        "urlTags": "utm_campaign=prospecting",
        "aiDisclosure": false
      }
    }
  }
}

Ogni chiave di texts.perAdset deve corrispondere a un gruppo di inserzioni pianificato. Le chiavi non corrispondenti vengono rifiutate invece di ricadere sul testo comune.

I preset di testo ti permettono di caricare una configurazione di testo salvata:

{ "textPresetId": "preset_id_here" }

Non puoi combinare textPresetId con texts.

Le opzioni di strategia controllano come vengono gestite più variazioni di testo:

  • "flexible" (predefinita) lascia che Meta ottimizzi tra le tue variazioni di testo. Più titoli e testi diventano opzioni che Facebook combina liberamente.
  • "separate" crea un annuncio separato per ogni combinazione di testo.

Una CTA di primo livello si applica a tutti gli annunci. Le CTA per annuncio in texts.perAd e le CTA per gruppo di inserzioni in texts.perAdset la sostituiscono.

{
  "cta": {
    "type": "SHOP_NOW",
    "link": "https://example.com",
    "displayUrl": "example.com"
  },
  "urlTags": "utm_source=facebook&utm_medium=paid"
}

Tipi di CTA standard: LEARN_MORE, SHOP_NOW, SIGN_UP, SUBSCRIBE, GET_OFFER, CONTACT_US, DOWNLOAD, ORDER_NOW, BUY_NOW, BOOK_NOW, APPLY_NOW, GET_QUOTE, GET_IN_TOUCH, WATCH_MORE, PLAY_GAME

Le CTA specifiche dell'obiettivo vengono ereditate dall'annuncio template e non dovrebbero essere impostate manualmente. Impostarle sul tipo di campagna sbagliato causerà un errore dell'API di Facebook.

CTAObiettivo di campagna richiesto
MESSAGE_PAGEDestinazione Messenger
WHATSAPP_MESSAGEDestinazione WhatsApp
INSTAGRAM_MESSAGEDestinazione DM di Instagram
CALL_NOWCampagna di chiamata

Split-test degli URL (destinazione divisa)

Fornisci da 2 a 5 URL di destinazione sotto texts.urlVariants e ogni gruppo di inserzioni generato viene duplicato una volta per URL, così Meta ottimizza ogni combinazione di annuncio e landing page in modo indipendente.

{
  "texts": {
    "common": { "headlines": ["Hero"], "bodies": ["Copy"] },
    "urlVariants": [
      { "link": "https://example.com/homepage", "label": "homepage" },
      { "link": "https://example.com/quiz", "label": "quiz-v2" }
    ]
  }
}
  • label è facoltativo. Quando omesso, viene usato l'ultimo slug del percorso dell'URL (/quiz-v2quiz-v2), con fallback al nome host per gli URL radice.
  • In modalità a gruppo di inserzioni singolo, l'etichetta di ogni variante diventa il nome completo del gruppo di inserzioni.
  • Nelle modalità perUpload e autoGroup, il nome di ogni gruppo di inserzioni duplicato aggiunge _{label} al pattern (o sostituisce un token {destination} se ne includi uno).
  • Il token {date} in un'etichetta si risolve nella data odierna (es. launch-{date}launch-2026-04-27).
  • Ogni URL di destinazione deve essere unico. URL identici (o varianti con barra finale / maiuscole-minuscole dello stesso URL) si uniscono in un'unica voce, quindi assicurati di avere almeno 2 destinazioni distinte.
  • Il budget del tuo gruppo di inserzioni viene moltiplicato per il numero di varianti, poiché ogni duplicato è un proprio gruppo di inserzioni.
  • Non compatibile con annunci sorgente a destinazione speciale (modulo per i contatti, Messenger, WhatsApp, DM di Instagram, chiamata). Il CLI rifiuta questa combinazione con un errore chiaro, quei formati non passano attraverso cta.link.
  • Le sostituzioni di link per annuncio in texts.perAd perdono contro l'URL della variante quando sono impostate entrambe.

Miglioramenti creativi

Controlla i miglioramenti creativi di Advantage+:

{ "creativeEnhancements": "none" }
ValoreEffetto
omessoTutte le funzioni disattivate
"metaDefaults"Alias deprecato per "none"
"all"Tutte le funzioni attivate
"none"Tutte le funzioni disattivate
["feature1", "feature2"]Solo le funzioni elencate attivate, il resto disattivato

Funzioni disponibili: text_translation, inline_comment, enhance_cta, text_optimizations, reveal_details_over_time, show_destination_blurbs, image_brightness_and_contrast, image_touchups, video_auto_crop, video_filtering, pac_relaxation, image_animation, image_templates, adapt_to_placement, product_extensions, product_tags, description_automation, add_text_overlay, music, carousel_to_video, carousel_dynamic_description, multi_share_end_card, multi_share_optimized

La chiave show_destination_blurbs viene visualizzata come Show spotlights, e pac_relaxation come Flex media.

Quando selezioni singole funzioni, elenca solo quelle pertinenti al tipo di media. Le funzioni video (video_auto_crop, video_filtering) si applicano solo agli annunci video. Le funzioni carosello (carousel_to_video, carousel_dynamic_description, multi_share_end_card, multi_share_optimized) si applicano solo agli annunci carosello.

product_tags si applica agli annunci immagine e video ed è disponibile solo in clonazione. Può essere attivato solo quando l'annuncio sorgente ha un catalogo associato e tag di prodotto espliciti e posizionati; tutti i tag della sorgente e le loro posizioni vengono preservati. "all" lo include solo per una sorgente idonea e non inventa mai un tag di prodotto.

Annunci carosello

Raggruppa i file caricati in annunci carosello con testo per scheda e testo complessivo del carosello facoltativo. cardTexts controlla le singole schede. Il testo complessivo del carosello può essere collocato nell'oggetto carosello o impostato in texts.perAd usando il name del carosello; i campi collocati vincono quando entrambi sono presenti.

{
  "carousel": [
    {
      "name": "My Carousel",
      "cards": ["slide1.jpg", "slide2.jpg", "slide3.jpg"],
      "headlines": ["Overall Carousel Headline"],
      "bodies": ["Overall primary text"],
      "descriptions": ["Overall description"],
      "cta": "SHOP_NOW",
      "link": "https://example.com/carousel",
      "urlTags": "utm_content=my_carousel",
      "cardTexts": [
        { "headline": "Slide 1", "description": "First card", "link": "https://example.com/1" },
        { "headline": "Slide 2", "description": "Second card", "link": "https://example.com/2" }
      ]
    }
  ]
}

Forma alternativa per il testo complessivo:

{
  "texts": {
    "perAd": {
      "My Carousel": {
        "headlines": ["Overall Carousel Headline"],
        "bodies": ["Overall primary text"],
        "descriptions": ["Overall description"],
        "cta": "SHOP_NOW",
        "link": "https://example.com/carousel",
        "urlTags": "utm_content=my_carousel"
      }
    }
  },
  "carousel": [
    {
      "name": "My Carousel",
      "cards": ["slide1.jpg", "slide2.jpg", "slide3.jpg"]
    }
  ]
}

Le schede devono fare riferimento a nomi di file del caricamento o a media catturati da un build salvato. Minimo 2 schede per carosello. I file rivendicati da un carosello vengono rimossi dall'elenco degli annunci standard.

Annunci flessibili

Raggruppa più asset in un unico annuncio flessibile in cui Meta sceglie l'asset migliore per posizionamento:

{
  "flexible": [
    {
      "name": "Multi-Asset Ad",
      "assets": ["hero.jpg", "promo.mp4", "banner.jpg"]
    }
  ]
}

Minimo 2 asset per gruppo. I file rivendicati da un gruppo flessibile vengono rimossi dall'elenco degli annunci standard.

Annunci multimediali

Raggruppa da 2 a 10 immagini o video caricati in un annuncio Multi Media di Meta:

{
  "multimedia": [
    {
      "name": "Mixed Media Ad",
      "assets": ["hero.jpg", "promo.mp4", "banner.jpg"],
      "assetTexts": [
        {
          "headline": "Hero headline",
          "primaryText": "Hero primary text",
          "description": "Hero description",
          "link": "https://example.com/hero",
          "displayUrl": "example.com/hero"
        }
      ]
    }
  ]
}

Gli asset devono fare riferimento a nomi di file del caricamento o a media catturati da un build salvato. assetTexts è facoltativo e si allinea ad assets per indice; ogni campo è una singola sostituzione per quell'asset e i campi vuoti ricadono sul testo principale e sugli URL dell'annuncio. L'asset principale renderizzato usa il testo e l'URL principali dell'annuncio, e qualsiasi sostituzione del testo dell'asset principale diventa la prima opzione di testo principale. I video necessitano di un URL di miniatura pubblico catturato. I file rivendicati da un gruppo Multi Media vengono rimossi dall'elenco degli annunci standard.

Denominazione degli annunci

Personalizza come vengono denominati i tuoi annunci:

{ "adNamePattern": "{filename} - {date}" }
SegnapostoCosa inserisce
{filename}Nome del file originale senza estensione
{index:01}Indice con zeri iniziali (01, 02, 03...)
{variation}Identificatore di variazione se il raggruppamento per varianti è attivo
{campaign}Nome della campagna
{date}Data corrente (AAAA-MM-GG)
{date:short}Data breve (MM-GG)
{timestamp}Timestamp Unix

Opzioni

{
  "options": {
    "status": "PAUSED",
    "pauseAt": "adSet",
    "schedule": {
      "startTime": "2026-04-01T09:00:00",
      "endTime": "2026-04-30T23:59:59"
    }
  }
}
CampoValoriDescrizione
status"PAUSED", "ACTIVE"Stato di lancio dell'annuncio (predefinito: ACTIVE)
pauseAt"ad", "adSet", "campaign"A quale livello mettere in pausa (predefinito: ad)
schedule.startTimeStringa ISO 8601Ora di inizio programmata (usa il fuso orario dell'account pubblicitario)
schedule.endTimeStringa ISO 8601Ora di fine programmata (facoltativa)

Caricamento e rilevamento delle varianti

I gruppi di varianti vengono rilevati automaticamente dalle convenzioni sui nomi dei file, proprio come nell'applicazione web. Consulta Variazioni del formato immagine per tutti i dettagli sulle convenzioni di denominazione.

Suffissi di rapporto: hero_1x1.jpg + hero_4x5.jpg + hero_9x16.jpg + hero_16x9.jpg + hero_1.91x1.jpg vengono raggruppati come un unico annuncio a varianti. Fino a 5 rapporti per gruppo.

Posizione del token: il token di rapporto può apparire alla fine (hero_4x5.jpg), in mezzo (hero_4x5_v2.jpg) o all'inizio (4x5_hero.jpg).

Suffissi di parole legacy: hero.jpg + hero_vertical.jpg + hero_horizontal.jpg funzionano ancora e si mappano su 9x16 e 16x9.

Il delimitatore predefinito è _. Puoi cambiarlo (o accettarne più di uno) in Account > Predefiniti > Posizionamenti > Separatore nome file.

Pattern comuni

Carica e crea con un preset

ads upload ./creatives/hero.jpg ./creatives/banner.jpg
ads create:preview spec.json
ads create spec.json

Dove spec.json contiene:

{ "adPresetId": "PRESET_ID", "uploadId": "BATCH_ID" }

Copia le impostazioni da un annuncio esistente

Naviga nel tuo account per trovare l'annuncio:

ads campaigns
ads campaign 120233848666410472
ads adset 120233848666620472
ads ad 120233848667930472

Poi crea una specifica che vi fa riferimento:

{
  "copyFromAd": "120233848667930472",
  "uploadId": "BATCH_ID"
}

L'annuncio sorgente deve avere impostazioni del creativo inline. Se è stato costruito da un post di Pagina esistente, il CLI lo rifiuterà prima di inviare una richiesta di creazione.

Salva un preset API da un annuncio esistente

ads presets:save --from-ad 120233848667930472 --name "Spring Purchase Template"
ads create --preset PRESET_ID --upload BATCH_ID

Questo salva la stessa forma di preset API usata dall'applicazione web. L'annuncio sorgente deve avere impostazioni del creativo inline; gli annunci basati su post di Pagina non possono essere salvati come preset API.

Testo per annuncio con copia unica per file

{
  "adPresetId": "PRESET_ID",
  "uploadId": "BATCH_ID",
  "texts": {
    "perAd": {
      "hero.jpg": {
        "headlines": ["Summer Sale Now On"],
        "bodies": ["Save up to 50% on all items"],
        "cta": "SHOP_NOW",
        "link": "https://example.com/summer"
      },
      "banner.jpg": {
        "headlines": ["New Collection Available"],
        "bodies": ["Browse our latest styles"],
        "cta": "LEARN_MORE",
        "link": "https://example.com/new"
      }
    }
  }
}

Raggruppamento automatico in più gruppi di inserzioni

{
  "adPresetId": "PRESET_ID",
  "uploadId": "BATCH_ID",
  "adSet": { "mode": "autoGroup", "adsPerAdSet": 3 }
}

Note importanti

  1. Visualizza sempre l'anteprima prima. create:preview rileva gli errori di configurazione prima di toccare Facebook.
  2. Gli annunci sono attivi per impostazione predefinita. Usa --status PAUSED o "status": "PAUSED" nella specifica per crearli in pausa.
  3. uploadId proviene dall'output del caricamento. È l'ID del caricamento restituito da ads upload.
  4. I caricamenti sono legati a un account pubblicitario. I file vengono caricati direttamente nella libreria multimediale Facebook dell'account selezionato. L'ID del caricamento può essere usato solo con lo stesso account.
  5. copyFromAd necessita di media risolvibili. Fornisci uploadId, oppure lancia un build salvato le cui immagini catturate hanno mediaHash e i cui video hanno mediaId. Facoltativamente, fornisci campaign.id e adSet.id per controllare il posizionamento.
  6. Le chiavi di testo per annuncio sono nomi di file. Usa "hero.jpg", non "/path/to/hero.jpg".
  7. textPresetId e texts si escludono a vicenda. Usa l'uno o l'altro, non entrambi.
  8. Le CTA specifiche dell'obiettivo vengono ereditate dal template. Non impostare MESSAGE_PAGE, WHATSAPP_MESSAGE, ecc. manualmente.