Passer au contenu principal

Comment créer un générateur de rapports de campagne alimenté par l’IA pour les clients d’agence dans Formaloo

Créez dans Formaloo un générateur de rapports de campagne alimenté par l’IA. Saisissez une seule fois les dépenses et les résultats, puis transformez-les automatiquement en PDF client à votre image.

Ce que vous allez créer

À la fin de ce guide, vous disposerez d’un formulaire unique de reporting de campagne dans lequel vos chargés de compte saisissent, pour chaque client et chaque période, les dépenses, les résultats, les réussites et le contexte. Formaloo transforme cette soumission en rapport PDF à votre image, selon l’un des trois designs de votre choix, et l’envoie directement au client dès que votre équipe l’a approuvé. Toute votre équipe travaille depuis un portail unique qui suit chaque rapport par statut, client et personne assignée, afin que rien ne se perde entre le tableau de bord analytique et la boîte de réception du client.


Quand l’utiliser

  • Vous copiez manuellement les chiffres d’un tableau de bord publicitaire dans une présentation ou un document pour chaque client, tous les mois

  • Plusieurs chargés de compte établissent des rapports pour différents clients, et il n’existe aucun endroit unique pour voir ce qui a été envoyé et ce qui ne l’a pas été

  • Les clients demandent sans cesse « où est mon rapport ? », car l’envoi est une étape manuelle dont quelqu’un doit se souvenir

  • Vous souhaitez que chaque rapport client présente une image de marque cohérente, quel que soit le chargé de compte qui l’a rédigé

  • Vous ajoutez des clients sous contrat plus vite que votre équipe ne peut suivre le reporting manuel, et cela commence à vous coûter une journée entière chaque mois


Étape par étape

Partie 1 — Créer le formulaire de rapport de campagne avec le Form Creation Agent

C’est ici que le système commence. Vous allez créer un formulaire unique dans lequel les chargés de compte saisissent les performances de campagne d’un client pour une période donnée : dépenses, résultats, réussites et contexte. Le Form Creation Agent peut générer l’ensemble des champs en une seule fois à partir d’une instruction textuelle, y compris les champs réservés aux administrateurs dont votre équipe a besoin pour gérer l’examen et le statut.

1. Ouvrez le Form Creation Agent : depuis votre page d’accueil Formaloo, cliquez sur Form Creation Agent.

2. Décrivez votre formulaire : collez une instruction décrivant le formulaire de rapport de campagne. Par exemple : « Crée un formulaire de rapport de performance de campagne pour une agence marketing. Demande pour quel client et quelle campagne il est établi, l’adresse e-mail de contact du client, les dates de début et de fin de la période de reporting, les plateformes sur lesquelles la campagne a été diffusée, les dépenses totales, les impressions et les clics. Ajoute une question oui/non demandant si le rapport inclut le suivi des conversions payantes, et n’affiche les conversions et le chiffre d’affaires des conversions que si la réponse est oui. Ajoute des champs de texte long pour les principales réussites, les difficultés ou remarques et les priorités de la période suivante, ainsi qu’un téléversement de fichier pour le logo du client. Ajoute également trois champs réservés aux administrateurs : une liste déroulante Report status avec Draft, In review et Sent to client, un champ Assignee et un champ Internal notes. »

3. Cliquez sur Create : Formaloo génère l’intégralité du formulaire pour vous.

4. Vérifiez vos champs : votre formulaire devrait ressembler à ceci, le Form Creation Agent en ayant généré la majeure partie. Vérifiez que chaque champ et chaque ID de champ correspondent exactement.

Champ (formulation de la question)

L’ID du champ

Type

Pour quel client ce rapport est-il établi ?

client_name

Texte court

Quelle est l’adresse e-mail de contact du client pour l’envoi de ce rapport ?

client_contact_email

Texte court

Quel est le nom de la campagne ?

campaign_name

Texte court

Quelle est la date de début de cette période de reporting ?

report_period_start

Date

Quelle est la date de fin de cette période de reporting ?

report_period_end

Date

Sur quelles plateformes cette campagne a-t-elle été diffusée ?

platforms_used

Liste déroulante à choix multiples

Quelles ont été les dépenses totales pour cette période ?

total_spend

Nombre

Combien d’impressions la campagne a-t-elle générées ?

impressions

Nombre

Combien de clics la campagne a-t-elle générés ?

clicks

Nombre

Ce rapport inclut-il le suivi des conversions payantes ?

has_conversion_tracking

Oui/Non

Combien de conversions la campagne a-t-elle générées ?

conversions

Nombre

Quel chiffre d’affaires ou quelle valeur de conversion totale a été généré(e) ?

conversion_revenue

Nombre

Quelles ont été les principales réussites ou les points forts de cette période ?

key_wins

Texte long

Des difficultés ou des éléments de contexte que le client devrait connaître ?

challenges_notes

Texte long

Quelles sont les priorités ou le plan pour la période suivante ?

next_period_focus

Texte long

Téléversez le logo du client pour le rapport à son image (facultatif)

client_logo_upload

Téléversement de fichier

5. Publiez votre formulaire : cliquez sur Publish dans la barre flottante en haut de l’éditeur.


Partie 2 — Configurer la logique de reporting avec le Logic Agent

Toutes les campagnes n’ont pas un objectif de conversion payante : le formulaire ne doit donc demander les chiffres de conversion que lorsqu’ils s’appliquent. Vous allez utiliser le Logic Agent pour décrire cela en langage naturel et laisser Formaloo créer la règle.

1. Ouvrez Advanced logic : dans le panneau des paramètres du formulaire, à droite de l’éditeur, cliquez sur Advanced logic et accédez à l’onglet Logic.

2. Cliquez sur Logic Agent : dans le coin supérieur droit du panneau Logic, cliquez sur Logic Agent.

3. Décrivez votre règle : collez cette instruction : « Lorsque la réponse à 'Ce rapport inclut-il le suivi des conversions payantes ?' est Yes, affiche 'Combien de conversions la campagne a-t-elle générées ?' et 'Quel chiffre d’affaires ou quelle valeur de conversion totale a été généré(e) ?'. Masque ces deux champs par défaut. Rends les deux champs obligatoires chaque fois que la réponse à la question sur le suivi des conversions est Yes. »

4. Cliquez sur Generate rules : l’IA de Formaloo vous présente un aperçu de la règle.

5. Approuvez la règle : approuvez-la, refaites-la ou annulez-la jusqu’à ce qu’elle corresponde à votre description.

6. Enregistrez votre logique : cliquez sur Save dans le coin supérieur droit.


Partie 3 — Créer vos modèles d’e-mail

Vous aurez besoin de trois modèles d’e-mail : un qui prévient votre équipe dès qu’un rapport est enregistré, un qui le signale pour examen par l’administration et un qui est envoyé au client une fois le rapport approuvé. Chacun est rédigé sous forme d’instruction IA : Formaloo génère ainsi un texte nouveau et naturel pour chaque soumission, au lieu d’un bloc de texte figé.

1. Ouvrez les modèles d’e-mail personnalisés : cliquez sur l’icône de votre profil, accédez à Apps and integrations et trouvez Custom email templates.

2. Créez votre premier modèle : cliquez sur Add new template, nommez-le « Report saved confirmation », définissez l’objet sur « Votre rapport de campagne pour @client_name est enregistré », videz le corps, ajoutez AI Content et collez cette instruction : « Rédige une confirmation chaleureuse et brève indiquant que ce rapport de campagne pour @client_name (@campaign_name), couvrant la période du @report_period_start au @report_period_end, a été enregistré comme brouillon et est en attente d’examen. 2 à 3 phrases, sur un ton cordial et efficace. » Enregistrez le modèle.

3. Créez votre deuxième modèle : répétez l’étape 2 pour un modèle nommé « New report ready for review », avec l’objet « Nouveau rapport de campagne prêt pour examen : @client_name » et cette instruction : « Rédige une notification factuelle et concise indiquant qu’un nouveau rapport de campagne pour @client_name (@campaign_name) a été soumis et doit être examiné avant son envoi. Mentionne la période de reporting. Moins de 4 phrases, sans superflu. »

4. Créez votre troisième modèle : répétez l’étape 2 pour un modèle nommé « Campaign report ready for client », avec l’objet « Votre rapport de performance @campaign_name est prêt » et cette instruction : « Rédige un e-mail soigné destiné au client, présentant le rapport de performance de campagne joint pour la période du @report_period_start au @report_period_end. Mentionne brièvement @key_wins pour donner un ton positif, précise que la ventilation complète figure dans le PDF joint et termine en proposant d’en discuter davantage. 4 à 5 phrases, sur un ton professionnel et chaleureux. »

Voici le contenu complet des trois modèles pour référence :

Report saved confirmation Objet : Votre rapport de campagne pour @client_name est enregistré Instruction pour le corps : Rédige une confirmation chaleureuse et brève indiquant que ce rapport de campagne pour @client_name (@campaign_name), couvrant la période du @report_period_start au @report_period_end, a été enregistré comme brouillon et est en attente d’examen. 2 à 3 phrases, sur un ton cordial et efficace. Déclencheur : envoyé à la boîte de réception d’examen de votre agence dès qu’un rapport est soumis, configuré dans la partie 4.

New report ready for review Objet : Nouveau rapport de campagne prêt pour examen : @client_name Instruction pour le corps : Rédige une notification factuelle et concise indiquant qu’un nouveau rapport de campagne pour @client_name (@campaign_name) a été soumis et doit être examiné avant son envoi. Mentionne la période de reporting. Moins de 4 phrases, sans superflu. Déclencheur : transmis à l’équipe administrative de votre agence via l’option de transfert/d’acheminement de la même notification, configuré dans la partie 4.

Campaign report ready for client Objet : Votre rapport de performance @campaign_name est prêt Instruction pour le corps : Rédige un e-mail soigné destiné au client, présentant le rapport de performance de campagne joint pour la période du @report_period_start au @report_period_end. Mentionne brièvement @key_wins pour donner un ton positif, précise que la ventilation complète figure dans le PDF joint et termine en proposant d’en discuter davantage. 4 à 5 phrases, sur un ton professionnel et chaleureux. Déclencheur : envoyé automatiquement lorsque Report status passe à Sent to client, avec le PDF en pièce jointe, configuré dans la partie 4.


Partie 4 — Activer les notifications et le déclencheur d’envoi au client

Associez maintenant ces modèles aux moments qui doivent les déclencher : la soumission d’un rapport et le marquage d’un rapport comme envoyé par un administrateur.

1. Ouvrez Notify : dans la barre latérale droite du créateur de formulaires, cliquez sur Notify.

2. Activez la notification d’enregistrement pour votre équipe : activez Receive email notification, saisissez la boîte de réception d’examen interne de votre agence et sélectionnez Report saved confirmation comme modèle, afin que votre équipe reçoive une alerte légère dès qu’un rapport arrive.

3. Acheminez la notification d’examen : recherchez l’option permettant de transférer ou d’acheminer l’e-mail, sélectionnez New report ready for review comme modèle et cliquez sur Publish afin que l’équipe administrative de votre agence reçoive l’avis d’examen plus complet.

4. Configurez le déclencheur d’envoi au client : dans Advanced logic, accédez à On Update et cliquez sur Add rule. Définissez la condition « Lorsque Report status passe à Sent to client » et l’action d’envoi d’un e-mail avec le modèle Campaign report ready for client à l’adresse indiquée dans « Quelle est l’adresse e-mail de contact du client pour l’envoi de ce rapport ? ».

5. Joignez le PDF : dans la même règle, joignez le PDF du rapport de campagne généré à l’e-mail, puis cliquez sur Save.

Partie 5 — Créer vos modèles de rapport PDF à votre image

C’est la pièce maîtresse de tout le processus : le PDF généré par l’IA et à votre image qui est effectivement envoyé au client. Créez trois variantes de design afin que les agences puissent choisir celle qui correspond le mieux à la marque de leur client, les trois utilisant les mêmes champs.

1. Ouvrez les modèles PDF personnalisés : cliquez sur l’icône de votre profil, accédez à Apps and integrations et cliquez sur Custom PDF template.

2. Ajoutez votre premier design : cliquez sur Add new template, basculez l’éditeur en HTML view et collez le design Classic, une mise en page blanche et épurée avec des libellés discrets et de fins séparateurs. Nommez-le « Campaign report: Classic » et enregistrez-le.

3. Ajoutez votre deuxième design : répétez l’étape 2 pour le design Bold, avec un bandeau d’en-tête de couleur d’accent et des cartes de statistiques teintées, idéal pour les agences ayant une identité visuelle forte. Nommez-le « Campaign report: Bold ».

4. Ajoutez votre troisième design : répétez l’étape 2 pour le design Dark, avec un fond bleu marine et un accent doré, adapté aux clients sous contrat haut de gamme ou au style éditorial. Nommez-le « Campaign report: Dark ».

5. Définissez le design par défaut : choisissez le design qui correspond à la marque de votre agence comme celui joint dans la règle d’envoi au client de la partie 4. Vous pourrez toujours le remplacer plus tard, puisque les trois s’appuient sur les mêmes champs.

Voici le code HTML complet des trois designs. Collez directement ceux que vous souhaitez dans la vue HTML.

Campaign report: Classic

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Campaign Performance Report — Classic</title> <style>   @page { margin: 0; }   * { box-sizing: border-box; }   body {     margin: 0;     background: #ffffff;     font-family: 'Inter', system-ui, -apple-system, sans-serif;     color: #1a1a1a;   }   .page {     max-width: 760px;     margin: 0 auto;     padding: 60px 72px;   }   .header {     display: flex;     justify-content: space-between;     align-items: flex-start;     padding-bottom: 24px;     border-bottom: 1px solid #eaeaea;     margin-bottom: 32px;   }   .header .logo img {     max-height: 40px;     max-width: 160px;     object-fit: contain;   }   .header .doc-info { text-align: right; }   .doc-title {     font-size: 22px;     font-weight: 700;     margin: 0 0 4px 0;     letter-spacing: -0.01em;   }   .doc-meta {     font-size: 12px;     color: #999;     margin: 0;   }   .section { margin-bottom: 28px; }   .section-title {     font-size: 10px;     text-transform: uppercase;     letter-spacing: 0.08em;     color: #aaaaaa;     margin-bottom: 12px;     font-weight: 600;   }   .grid {     display: grid;     grid-template-columns: 1fr 1fr;     gap: 0 32px;   }   .field {     padding: 10px 0;     border-bottom: 1px solid #f0f0f0;   }   .field-label {     font-size: 11px;     color: #999;     margin-bottom: 2px;   }   .field-value {     font-size: 14px;     color: #1a1a1a;     font-weight: 500;   }   .field-full { grid-column: 1 / -1; }   .stat-value { font-size: 20px; font-weight: 700; }   .long-text-block {     font-size: 13px;     line-height: 1.6;     color: #333;     white-space: pre-wrap;   }   .inset {     background: #f9f9f9;     border-left: 3px solid #ddd;     padding: 16px 20px;     border-radius: 4px;     font-size: 13px;     line-height: 1.6;     color: #444;   }   .footer {     margin-top: 48px;     padding-top: 16px;     border-top: 1px solid #eaeaea;     display: flex;     justify-content: space-between;     font-size: 10px;     color: #bbb;   } </style> </head> <body>   <div class="page">      <div class="header">       <div class="logo">         <img src="@client_logo_upload" alt="Logo du client" onerror="this.style.display='none'">       </div>       <div class="doc-info">         <p class="doc-title">Campaign performance report</p>         <p class="doc-meta">Ref: @campaign_name · @report_period_start – @report_period_end</p>       </div>     </div>      <div class="section">       <div class="section-title">Campaign overview</div>       <div class="grid">         <div class="field">           <div class="field-label">Client</div>           <div class="field-value">@client_name</div>         </div>         <div class="field">           <div class="field-label">Campaign</div>           <div class="field-value">@campaign_name</div>         </div>         <div class="field">           <div class="field-label">Reporting period</div>           <div class="field-value">@report_period_start – @report_period_end</div>         </div>         <div class="field">           <div class="field-label">Platforms</div>           <div class="field-value">@platforms_used</div>         </div>       </div>     </div>      <div class="section">       <div class="section-title">Performance metrics</div>       <div class="grid">         <div class="field">           <div class="field-label">Total spend</div>           <div class="field-value stat-value">@total_spend</div>         </div>         <div class="field">           <div class="field-label">Impressions</div>           <div class="field-value stat-value">@impressions</div>         </div>         <div class="field">           <div class="field-label">Clicks</div>           <div class="field-value stat-value">@clicks</div>         </div>         <div class="field">           <div class="field-label">Conversions</div>           <div class="field-value stat-value">@conversions</div>         </div>         <div class="field field-full">           <div class="field-label">Conversion revenue</div>           <div class="field-value stat-value">@conversion_revenue</div>         </div>       </div>     </div>      <div class="section">       <div class="section-title">Key wins & highlights</div>       <div class="long-text-block">@key_wins</div>     </div>      <div class="section">       <div class="section-title">Notes & context</div>       <div class="inset">@challenges_notes</div>     </div>      <div class="section">       <div class="section-title">Focus for next period</div>       <div class="long-text-block">@next_period_focus</div>     </div>      <div class="footer">       <span>Confidential — prepared for @client_name</span>       <span>[Agency name]</span>     </div>    </div> </body> </html>

Campaign report: Bold

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Campaign Performance Report — Bold</title> <style>   @page { margin: 0; }   * { box-sizing: border-box; }   :root { --accent: #4F46E5; --accent-soft: #EEF0FF; }   body {     margin: 0;     background: #ffffff;     font-family: 'Inter', system-ui, -apple-system, sans-serif;     color: #14141c;   }   .page {     max-width: 760px;     margin: 0 auto;     padding: 0 0 60px 0;   }   .header-band {     background: var(--accent);     color: #fff;     padding: 48px 72px 32px 72px;     display: flex;     justify-content: space-between;     align-items: flex-start;   }   .header-band .logo img {     max-height: 36px;     max-width: 150px;     object-fit: contain;     filter: brightness(0) invert(1);   }   .doc-title {     font-size: 24px;     font-weight: 800;     margin: 0 0 6px 0;     letter-spacing: -0.01em;   }   .doc-meta {     font-size: 12px;     color: #d9d7ff;     margin: 0;   }   .body-content { padding: 40px 72px 0 72px; }   .section { margin-bottom: 32px; }   .section-title {     font-size: 10px;     text-transform: uppercase;     letter-spacing: 0.08em;     color: var(--accent);     margin-bottom: 14px;     font-weight: 700;   }   .grid {     display: grid;     grid-template-columns: 1fr 1fr;     gap: 12px;   }   .card {     background: var(--accent-soft);     border-radius: 10px;     padding: 14px 16px;   }   .card-label {     font-size: 11px;     color: #6b6b8a;     margin-bottom: 4px;     font-weight: 600;   }   .card-value {     font-size: 15px;     color: #14141c;     font-weight: 600;   }   .stat-card { text-align: left; }   .stat-value { font-size: 24px; font-weight: 800; color: var(--accent); }   .field-full { grid-column: 1 / -1; }   .long-text-block {     font-size: 13px;     line-height: 1.7;     color: #333;     white-space: pre-wrap;   }   .inset {     background: #14141c;     color: #fff;     padding: 18px 22px;     border-radius: 10px;     font-size: 13px;     line-height: 1.7;   }   .footer {     margin: 48px 72px 0 72px;     padding-top: 16px;     border-top: 1px solid #eee;     display: flex;     justify-content: space-between;     font-size: 10px;     color: #bbb;   } </style> </head> <body>   <div class="page">      <div class="header-band">       <div class="logo">         <img src="@client_logo_upload" alt="Logo du client" onerror="this.style.display='none'">       </div>       <div class="doc-info">         <p class="doc-title">Campaign performance report</p>         <p class="doc-meta">@campaign_name · @report_period_start – @report_period_end</p>       </div>     </div>      <div class="body-content">        <div class="section">         <div class="section-title">Campaign overview</div>         <div class="grid">           <div class="card">             <div class="card-label">Client</div>             <div class="card-value">@client_name</div>           </div>           <div class="card">             <div class="card-label">Campaign</div>             <div class="card-value">@campaign_name</div>           </div>           <div class="card">             <div class="card-label">Reporting period</div>             <div class="card-value">@report_period_start – @report_period_end</div>           </div>           <div class="card">             <div class="card-label">Platforms</div>             <div class="card-value">@platforms_used</div>           </div>         </div>       </div>        <div class="section">         <div class="section-title">Performance metrics</div>         <div class="grid">           <div class="card stat-card">             <div class="card-label">Total spend</div>             <div class="stat-value">@total_spend</div>           </div>           <div class="card stat-card">             <div class="card-label">Impressions</div>             <div class="stat-value">@impressions</div>           </div>           <div class="card stat-card">             <div class="card-label">Clicks</div>             <div class="stat-value">@clicks</div>           </div>           <div class="card stat-card">             <div class="card-label">Conversions</div>             <div class="stat-value">@conversions</div>           </div>           <div class="card stat-card field-full">             <div class="card-label">Conversion revenue</div>             <div class="stat-value">@conversion_revenue</div>           </div>         </div>       </div>        <div class="section">         <div class="section-title">Key wins & highlights</div>         <div class="long-text-block">@key_wins</div>       </div>        <div class="section">         <div class="section-title">Notes & context</div>         <div class="inset">@challenges_notes</div>       </div>        <div class="section">         <div class="section-title">Focus for next period</div>         <div class="long-text-block">@next_period_focus</div>       </div>      </div>      <div class="footer">       <span>Confidential — prepared for @client_name</span>       <span>[Agency name]</span>     </div>    </div> </body> </html>

Campaign report: Dark

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Campaign Performance Report — Dark</title> <style>   @page { margin: 0; }   * { box-sizing: border-box; }   :root { --gold: #D4AF6A; --bg: #111318; --card: #1a1d26; --muted: #8a8d98; }   body {     margin: 0;     background: var(--bg);     font-family: 'Inter', system-ui, -apple-system, sans-serif;     color: #f5f5f5;   }   .page {     max-width: 760px;     margin: 0 auto;     padding: 60px 72px;   }   .header {     display: flex;     justify-content: space-between;     align-items: flex-start;     padding-bottom: 24px;     border-bottom: 1px solid #2a2d38;     margin-bottom: 32px;   }   .header .logo img {     max-height: 40px;     max-width: 160px;     object-fit: contain;     filter: brightness(0) invert(1);   }   .header .doc-info { text-align: right; }   .doc-title {     font-size: 22px;     font-weight: 700;     margin: 0 0 4px 0;     letter-spacing: -0.01em;     color: #fff;   }   .doc-meta {     font-size: 12px;     color: var(--gold);     margin: 0;   }   .section { margin-bottom: 28px; }   .section-title {     font-size: 10px;     text-transform: uppercase;     letter-spacing: 0.1em;     color: var(--gold);     margin-bottom: 12px;     font-weight: 600;   }   .grid {     display: grid;     grid-template-columns: 1fr 1fr;     gap: 12px;   }   .field {     background: var(--card);     border: 1px solid #2a2d38;     border-radius: 8px;     padding: 14px 16px;   }   .field-label {     font-size: 11px;     color: var(--muted);     margin-bottom: 4px;   }   .field-value {     font-size: 14px;     color: #f5f5f5;     font-weight: 500;   }   .field-full { grid-column: 1 / -1; }   .stat-value { font-size: 20px; font-weight: 700; color: var(--gold); }   .long-text-block {     font-size: 13px;     line-height: 1.7;     color: #d8d8dc;     white-space: pre-wrap;   }   .inset {     background: var(--card);     border-left: 3px solid var(--gold);     padding: 16px 20px;     border-radius: 4px;     font-size: 13px;     line-height: 1.7;     color: #d8d8dc;   }   .footer {     margin-top: 48px;     padding-top: 16px;     border-top: 1px solid #2a2d38;     display: flex;     justify-content: space-between;     font-size: 10px;     color: #5c5f6a;   } </style> </head> <body>   <div class="page">      <div class="header">       <div class="logo">         <img src="@client_logo_upload" alt="Logo du client" onerror="this.style.display='none'">       </div>       <div class="doc-info">         <p class="doc-title">Campaign performance report</p>         <p class="doc-meta">Ref: @campaign_name · @report_period_start – @report_period_end</p>       </div>     </div>      <div class="section">       <div class="section-title">Campaign overview</div>       <div class="grid">         <div class="field">           <div class="field-label">Client</div>           <div class="field-value">@client_name</div>         </div>         <div class="field">           <div class="field-label">Campaign</div>           <div class="field-value">@campaign_name</div>         </div>         <div class="field">           <div class="field-label">Reporting period</div>           <div class="field-value">@report_period_start – @report_period_end</div>         </div>         <div class="field">           <div class="field-label">Platforms</div>           <div class="field-value">@platforms_used</div>         </div>       </div>     </div>      <div class="section">       <div class="section-title">Performance metrics</div>       <div class="grid">         <div class="field">           <div class="field-label">Total spend</div>           <div class="field-value stat-value">@total_spend</div>         </div>         <div class="field">           <div class="field-label">Impressions</div>           <div class="field-value stat-value">@impressions</div>         </div>         <div class="field">           <div class="field-label">Clicks</div>           <div class="field-value stat-value">@clicks</div>         </div>         <div class="field">           <div class="field-label">Conversions</div>           <div class="field-value stat-value">@conversions</div>         </div>         <div class="field field-full">           <div class="field-label">Conversion revenue</div>           <div class="field-value stat-value">@conversion_revenue</div>         </div>       </div>     </div>      <div class="section">       <div class="section-title">Key wins & highlights</div>       <div class="long-text-block">@key_wins</div>     </div>      <div class="section">       <div class="section-title">Notes & context</div>       <div class="inset">@challenges_notes</div>     </div>      <div class="section">       <div class="section-title">Focus for next period</div>       <div class="long-text-block">@next_period_focus</div>     </div>      <div class="footer">       <span>Confidential — prepared for @client_name</span>       <span>[Agency name]</span>     </div>    </div> </body> </html>

Partie 6 — Transformer le tout en portail pour votre équipe

Enfin, intégrez le formulaire dans un portail afin que les chargés de compte et les administrateurs de l’agence disposent chacun de leur propre vue du pipeline de reporting, limitée à ce qui les concerne.

1. Activez le portail : accédez aux Settings de votre projet (icône d’engrenage), sélectionnez Activate portal, cliquez sur Manage user et ouvrez le Setup wizard.

2. Configurez votre annuaire d’utilisateurs : recherchez un annuaire d’utilisateurs existant ou ajoutez-en un nouveau, puis cliquez sur Next step. Chaque portail a besoin d’un annuaire pour gérer ses utilisateurs inscrits.

3. Connectez le formulaire : ajoutez le champ de profil pour connecter votre annuaire d’utilisateurs au formulaire de rapport de campagne.

4. Ajoutez vos rôles utilisateur : dans le User directory, cliquez sur Edit profile fields, faites défiler jusqu’à User roles et ajoutez « Account manager » et « Agency admin » comme rôles.

5. Limitez « My reports » aux soumissions de chaque chargé de compte : sur le bloc de données de la page « My reports », passez en Edit mode, cliquez sur Options, faites défiler jusqu’à Manage access, sélectionnez le champ de profil de l’auteur de la soumission et activez Allow users to view only their data.

6. Limitez la vue du pipeline attribué : sur « My assigned reports », passez en Edit mode, cliquez sur Options, faites défiler jusqu’à Manage access, sélectionnez le champ Assignee et activez Allow assignees to view only their data.

7. Créez les autres pages d’administration : ajoutez « All reports » sous forme de tableau Kanban regroupé par Report status, ainsi que « Reports by date », « Draft reports », « Ready for review » et « Sent to client » sous forme de blocs de données Table connectés à votre formulaire de rapport de campagne, filtrés comme décrit dans le plan des pages de votre projet.

8. Publiez votre portail.

Remarque : vous pouvez définir un domaine personnalisé pour votre portail afin qu’il soit entièrement aux couleurs de votre agence ; cette option est disponible avec le Business plan ou via le Brand removal add-on.


Ce que vous obtenez

Un formulaire unique de rapport de campagne remplace le rituel mensuel consistant à copier les dépenses et les résultats d’un tableau de bord publicitaire dans une présentation. Chaque chargé de compte saisit une seule fois les chiffres de son client, et l’IA de Formaloo les transforme automatiquement en PDF soigné et à votre image, dans celui des trois designs qui convient au client. L’équipe administrative de votre agence examine les rapports depuis un pipeline Kanban unique au lieu de courir après les statuts sur Slack, et l’e-mail d’envoi au client part dès qu’un rapport est marqué comme prêt : rien ne reste dans un dossier de brouillons au-delà de son échéance. À mesure que vous ajoutez des clients sous contrat, le même formulaire et le même portail évoluent avec vous au lieu d’ajouter une heure de travail manuel par client.


Et ensuite ?


Modèles prêts à l’emploi

Inutile de partir de zéro : nous l’avons déjà préparé pour vous.

Service cost estimator for agencies — permet aux clients d’estimer le coût d’un projet avant de réserver un appel, chaque estimation étant suivie depuis une vue dossier unique. Associez-le à ce processus de reporting pour couvrir la relation client d’une agence, du premier devis aux résultats mensuels.

AI lead qualification & scoring form — note les demandes de démo entrantes avec l’IA et oriente les prospects chauds et froids à l’aide d’e-mails conditionnels. Utile pour la même équipe d’agence lorsque les rapports de campagne commencent à faire émerger des clients prêts pour une vente additionnelle.

Employee request workflow — oriente les demandes internes par type, avec des approbations et des notifications d’équipe. Une bonne référence si vous souhaitez étendre le même schéma Assignee et Report status à d’autres processus internes de l’agence.


Découvrez d’autres tutoriels

Avez-vous trouvé la réponse à votre question ?