8 min de lectureTutoriels

Raccourcisseur d'URL en masse : importer depuis Google Sheets

Raccourcissez jusqu'à 100 liens par lot depuis Google Sheets : collage ou CSV dans le tableau de bord, ou API en masse via Apps Script. Limites réelles.

Ana Kowalska
Marketing solutions engineering

L'import en masse d'Elido crée jusqu'à 100 liens courts par lot à partir d'une liste de lignes url, slug, title. Vous pouvez coller les lignes depuis Google Sheets dans le tableau de bord, les téléverser en CSV, ou appeler l'API en masse depuis Apps Script. Les tags UTM ne sont pas une colonne d'import distincte : vous construisez l'URL finale taguée dans la feuille, et Elido la stocke comme destination.

C'est plus restreint que ce que promettent certains tutoriels (y compris une version antérieure de celui-ci) ; cet article s'en tient donc à ce que fait le code aujourd'hui. Si vous cherchiez un mode dry run, des options d'ignorance en cas de conflit ou un téléversement de 10 000 lignes, cela n'existe pas encore ; ces points sont suivis comme travail prévu et signalés comme tels plus bas.

Pour la vue d'ensemble des UTM, l'article de référence sur le suivi UTM couvre les modèles et la transmission des conversions côté serveur. Cet article est la tranche feuille vers liens courts.

En bref

  • Une feuille par campagne. Colonnes : final_url (construite avec une formule, UTM inclus), slug, title.
  • Voie tableau de bord : New link, puis l'onglet Bulk (collage) ou l'onglet CSV (téléversement). Les deux acceptent 100 liens par lot.
  • Voie API : POST /v1/links/bulk avec un corps JSON d'au plus 100 éléments. Les éléments prennent destination_url, slug, title, tags.
  • Chaque ligne réussit ou échoue séparément. Un slug déjà pris ne fait échouer que cette ligne.
  • Pas encore de dry run (prévu). Vérifiez plutôt quelques lignes après le premier lot.
La boîte de dialogue 'Importer des liens' d'Elido sur l'onglet CSV, où l'on charge l'export d'un tableur pour créer jusqu'à 100 liens courts en un seul lot

Construire la feuille

Elido lit trois éléments par lien : destination, slug, titre. Gardez les colonnes de travail à gauche et une colonne de sortie à droite.

ColonneUtilisée par ElidoRemarques
base_urlnonL'URL propre de la page de destination
utm_source, utm_medium, utm_campaignnonEntrées de la formule, propres à la feuille
final_urloui (destination)Construite par une formule, voir ci-dessous
slugoui (facultatif)Vide : Elido en génère un
titleoui (facultatif)Libellé affiché dans la liste des liens du tableau de bord
short_linknonRemplie après l'import

La formule final_url fait le travail UTM qu'Elido ne fait pas :

=TRIM(A2) & IF(ISNUMBER(FIND("?", A2)), "&", "?")
  & "utm_source=" & ENCODEURL(B2)
  & "&utm_medium=" & ENCODEURL(C2)
  & "&utm_campaign=" & ENCODEURL(D2)

Le faire dans la feuille a un avantage annexe : la destination que vous relisez est celle qui part en production. Rien n'est réécrit après coup, et une destination qui contient déjà un ? est prolongée avec & au lieu d'être cassée.

La recommandation de Google est de toujours renseigner utm_source, utm_medium et utm_campaign quand vous taguez une URL ; sans eux, les rapports affichent « (not set) » (aide Google Analytics, consultée le 2026-10-09). Ajoutez une colonne de contrôle comme =IF(OR(B2="",C2="",D2=""),"missing UTM","ok") et filtrez dessus avant l'export. Cela remplace l'avertissement de dry run que donnent d'autres outils.

Voie 1 : coller dans le tableau de bord (onglet Bulk)

Ouvrez New link et passez à Bulk. La zone de texte prend un lien par ligne :

https://shop.example/de?utm_source=newsletter&utm_medium=email&utm_campaign=q2-spring, q2-hero-de, Hero DE
https://shop.example/fr?utm_source=newsletter&utm_medium=email&utm_campaign=q2-spring, q2-hero-fr, Hero FR

L'analyseur découpe chaque ligne sur les virgules : la première partie est l'URL, la deuxième le slug, tout ce qui suit est le titre. Les lignes vides et celles qui commencent par # sont ignorées. Cela a deux conséquences pour les feuilles :

  • Les virgules dans une URL de destination cassent la ligne. Si une valeur UTM contient une virgule, encodez-la en %2C (le ENCODEURL de la formule ci-dessus le fait déjà).
  • Coller depuis Sheets donne des cellules séparées par des tabulations, pas par des virgules. Construisez une ligne jointe par des virgules pour chaque ligne dans une colonne d'aide, par exemple =E2 & ", " & F2 & ", " & G2, et copiez cette seule colonne.

Après l'import, la boîte de dialogue affiche le nombre de liens créés et le nombre d'échecs, chaque ligne en échec et son motif pouvant être déployés en dessous.

Liste des liens du tableau de bord Elido montrant les liens courts créés avec leurs destinations après un import en masse

Voie 2 : téléversement CSV (onglet CSV)

Téléchargez la feuille en CSV (File, Download, Comma-separated values) avec les colonnes dans l'ordre url, slug, title et téléversez-la dans l'onglet CSV. Le fichier est lu dans votre navigateur et envoyé via le même lot de 100 liens que l'onglet de collage. Si la première ligne ne commence pas par http, elle est traitée comme un en-tête et supprimée.

Le lecteur CSV est un simple découpage sur les virgules, pas un analyseur CSV complet. Les champs entre guillemets contenant des virgules ne sont pas compris : gardez donc les titres sans virgule, faute de quoi le titre sera tronqué. Au-delà de 100 lignes, découpez le fichier en blocs de 100.

Si le brief se trouve dans Excel, comment raccourcir des URL dans Excel présente les voies possibles.

Voie 3 : l'API depuis Apps Script

Pour une feuille qui se remplit toute la semaine, appelez l'API. Le point d'accès est POST https://api.elido.app/v1/links/bulk. Le jeton est un jeton d'accès personnel ou une clé d'API d'espace de travail envoyé en Authorization: Bearer ..., et une clé liée à l'espace de travail permet à l'appel d'omettre workspace_id et domain_id (le domaine par défaut de l'espace de travail est utilisé). L'authentification est décrite dans la documentation de l'API, sous Authentication.

curl -X POST https://api.elido.app/v1/links/bulk \
  -H "Authorization: Bearer $ELIDO_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "links": [
      { "destination_url": "https://shop.example/de?utm_source=newsletter&utm_medium=email&utm_campaign=q2-spring",
        "slug": "q2-hero-de", "title": "Hero DE", "tags": ["q2-spring", "email"] }
    ]
  }'

La réponse indique ok, failed et un tableau items avec une entrée par ligne d'entrée, dans l'ordre, chacune marquée ok ou error. Un slug déjà pris renvoie slug already exists for this domain sur cette seule ligne. L'en-tête Idempotency-Key est respecté pendant 24 heures : la même clé avec le même corps rejoue la réponse d'origine au lieu de créer les liens deux fois (voir Idempotency dans la documentation de l'API).

Chaque lien créé est aussi mis en file pour une analyse de sécurité asynchrone : un import en masse n'attend donc pas le scanner.

// Google Apps Script: send new sheet rows to Elido's bulk endpoint.
// Trigger: time-driven, hourly. Batches of 100 (the API maximum).
function importNewLinks() {
  const sheet =
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Q2 Spring");
  const data = sheet.getDataRange().getValues();
  const h = data[0];
  const urlCol = h.indexOf("final_url");
  const slugCol = h.indexOf("slug");
  const titleCol = h.indexOf("title");
  const doneCol = h.indexOf("short_link");

  const pending = [];
  for (let i = 1; i < data.length && pending.length < 100; i++) {
    if (data[i][urlCol] && !data[i][doneCol]) pending.push(i);
  }
  if (!pending.length) return;

  const links = pending.map((i) => ({
    destination_url: data[i][urlCol],
    slug: data[i][slugCol] || undefined,
    title: data[i][titleCol] || undefined,
  }));

  const resp = UrlFetchApp.fetch("https://api.elido.app/v1/links/bulk", {
    method: "post",
    contentType: "application/json",
    headers: {
      Authorization:
        "Bearer " +
        PropertiesService.getScriptProperties().getProperty("ELIDO_TOKEN"),
    },
    payload: JSON.stringify({ links }),
    muteHttpExceptions: true,
  });
  if (resp.getResponseCode() !== 200) {
    console.error(resp.getContentText());
    return;
  }

  JSON.parse(resp.getContentText()).items.forEach((item) => {
    const row = pending[item.index] + 1;
    const cell = sheet.getRange(row, doneCol + 1);
    cell.setValue(
      item.status === "ok" ? item.link.slug : "ERROR: " + item.error,
    );
  });
}

Remarques sur le script :

  • Il réécrit le slug (ou le texte de l'erreur), pas une URL complète. Préfixez votre domaine court dans une colonne de formule si vous voulez des liens cliquables. Les lignes avec un texte d'erreur dans short_link sont ignorées à l'exécution suivante : videz donc la cellule après avoir corrigé le slug.
  • Gardez le jeton dans les propriétés du script, pas dans le code.
  • Les limites d'Apps Script pour les comptes grand public sont de 20 000 appels URL Fetch par jour, 6 minutes par exécution et 90 minutes d'exécution de déclencheurs par jour (comptes Google Workspace : 100 000 appels, 6 heures) (quotas d'Apps Script, consultés le 2026-10-09). Une tâche horaire envoyant 100 liens par appel reste très en dessous.
  • La limite de débit de l'API d'Elido s'applique en plus, par jeton et par espace de travail ; voir Rate Limits dans la documentation de l'API.
Page des campagnes d'Elido où les liens importés en masse sont regroupés par campagne

Slugs et tags

Slugs. Préfixez les slugs de campagne (q2-, jun26-) pour qu'ils n'entrent pas en collision avec d'anciens liens. Une collision est signalée par ligne et le reste du lot passe : relancer la même feuille renvoie donc des erreurs pour les lignes qui existent déjà au lieu de les dupliquer. Laisser le slug vide fait qu'Elido en génère un.

Tags. Les onglets Bulk et CSV du tableau de bord ne définissent pas de tags ; l'API le fait, via le tableau tags. Les tags sont de simples chaînes : une convention dimension:value (channel:email) n'est donc qu'une habitude de nommage que vous appliquez dans la feuille, par exemple avec ="channel:"&C2. Pour savoir comment les campagnes regroupent les clics, voir la fonctionnalité campagnes.

Ce qui n'est pas encore construit

Ces éléments étaient décrits dans une version antérieure de cet article et n'existent pas dans le produit aujourd'hui :

  • Un dry run : aperçu des liens résolus et des conflits avant validation. Prévu.
  • Des modes de conflit (ignorer, échouer, remplacer) pour les slugs existants. Prévus ; aujourd'hui, un slug déjà pris est une erreur par ligne.
  • Des colonnes UTM et un modèle UTM d'espace de travail appliqués pendant l'import. Prévus ; utilisez la formule de la feuille ci-dessus.
  • Des lots plus grands (10 000 lignes) et un téléversement asynchrone avec rapport d'état. Prévus ; la limite est de 100 par requête.
  • Des tags directement dans les onglets d'import du tableau de bord. Prévus.

Tant que le dry run n'existe pas, vérifiez dans le tableau de bord la première et la dernière ligne du premier lot avant de publier les liens.

Pour aller plus loin

Définissez d'abord un domaine par défaut et votre image de marque avec setup-branded-short-links. Pour l'attribution après le clic, le suivi des conversions côté serveur explique comment fonctionne la transmission des conversions à Meta et GA4 ; Elido lui-même ne leur transmet pas encore les achats. Le workflow marketeur de bout en bout se trouve sur solutions/marketers et la fonctionnalité campagnes.

Voir aussi sur le blog

Questions fréquentes

Combien de liens puis-je raccourcir à la fois dans Elido ?

100 par lot, aussi bien dans les onglets Bulk et CSV du tableau de bord que dans l'appel d'API POST /links/bulk. Les feuilles plus volumineuses sont découpées en lots de 100. Chaque ligne est traitée séparément : une ligne invalide ne fait donc pas échouer le lot.

Quelles colonnes l'import en masse d'Elido lit-il ?

Dans le tableau de bord, une ligne par lien dans l'ordre url, slug, title. Le slug et le titre sont facultatifs. Via l'API, chaque élément accepte en plus un tableau tags. Il n'y a pas de colonnes UTM : construisez d'abord l'URL taguée dans la feuille.

Elido propose-t-il un essai à blanc (dry run) pour les imports en masse ?

Non. Il n'existe aujourd'hui aucun mode d'aperçu, ni d'option pour ignorer ou remplacer les slugs existants. Un slug déjà pris revient comme une erreur sur cette seule ligne. C'est au backlog comme travail prévu.

Que se passe-t-il quand un slug existe déjà ?

Cette ligne renvoie le statut error avec le message slug already exists for this domain, et toutes les autres lignes sont quand même créées. Corrigez le slug et réimportez uniquement les lignes en échec.

Apps Script peut-il appeler l'API en masse selon un calendrier ?

Oui. Un déclencheur temporel peut lire les lignes sans lien court, les envoyer en POST au point d'accès en masse avec UrlFetchApp et réécrire les slugs. Le quota de Google est de 20 000 appels URL Fetch par jour pour un compte grand public, bien plus que ce qu'il faut pour des lots horaires de 100.

Les paramètres UTM doivent-ils aller dans la feuille ou dans le raccourcisseur ?

Dans la feuille. L'import en masse d'Elido stocke la destination exactement telle qu'elle est fournie : une formule qui ajoute utm_source, utm_medium et utm_campaign à chaque URL vous donne des destinations relisibles et vérifiables avant même que le moindre lien existe.

Essayer Elido

Collez une URL, obtenez un lien court

Sans inscription. Lien actif 30 jours. Inscrivez-vous pour le garder pour toujours.

Sans inscription. Créez un compte gratuit pour 50 liens par mois.

Essayer Elido

Raccourcisseur d'URL hébergé en UE : domaines personnalisés, analyses approfondies et API ouverte. Forfait gratuit - sans carte bancaire.

Tags
bulk url shortener
csv import short links
sheets to short links
bulk link creation
campaign url shortener
google sheets automation

Lire la suite