Der Dub.co-Importer von Elido liest Ihre Links über die REST-API von Dub, 100 pro Anfrage, und legt sie mit demselben Slug auf einer Elido-Domain an. Er übernimmt Slug, Ziel-URL, Titel und Tag-Namen. Er übernimmt keine Ordner, keine archivierten Links, keinen Klickverlauf und keine Link-Einstellungen. Das sind die Fakten, die zählen, wenn Sie einen Umzug planen.
Eine frühere Version dieses Beitrags behauptete, Dub-Ordner würden zu Tags abgeflacht. Ich habe den Importer für dieses Update erneut gelesen, und das war falsch: Der Code liest Ordner nie. Diese Version beschreibt, was services/api-core/internal/imports/dub.go heute tut, geprüft gegen die veröffentlichte API-Spezifikation von Dub (abgerufen am 2026-10-02).
Was der Importer von Dub abfragt
Der Worker sendet GET https://api.dub.co/links?page=N&pageSize=100 mit Ihrem Key als Bearer-Token. Laut Dubs Dokumentation zu API-Keys (abgerufen am 2026-10-02) ist ein Key an einen Workspace gebunden und kann schreibgeschützt erstellt werden. Ein schreibgeschützter Key reicht für diesen Import völlig aus, weil der Worker Links nur auflistet und nie in Dub schreibt.
Die Antwort ist ein schlichtes JSON-Array. Es gibt kein "hat mehr"-Flag, der Worker fordert also weiter Seiten an, bis eine mit weniger als 100 Einträgen oder eine leere zurückkommt:
if len(links) == 0 { break }
// ... import each link ...
if len(links) < dubPageSize { break } // last page
page++
Ein Vorbehalt aus Dubs eigener Spezifikation: Der Parameter page ist zugunsten von Cursor-Paginierung mit startingAfter als veraltet markiert. Er funktioniert heute noch, und pageSize akzeptiert bis zu 100. Sollte Dub page entfernen, braucht der Importer eine kleine Änderung, und ich würde erwarten, dass sich das als fehlgeschlagener Job mit klarem HTTP-Fehler zeigt statt als stiller Datenverlust.
Dubs Seite zu Rate Limits (abgerufen am 2026-10-02) nennt 60 Anfragen pro Minute im Free-Plan und 600 im Pro-Plan. Der Importer fügt zwischen den Anfragen Links einzeln in Postgres ein und kommt in der Praxis nicht in die Nähe des Free-Limits. Er hat außerdem keinen Retry: Ein HTTP 429 oder jede andere Antwort außer 200 beendet den Job als fehlgeschlagen, mit dem Statuscode in der Meldung.
Was in Elido landet, Feld für Feld
| Dub-Feld | In Elido | Hinweise |
|---|---|---|
key | Slug | Unterliegt der Konfliktstrategie weiter unten |
url | Ziel-URL | Ein Link ohne URL oder ohne Key zählt als fehlgeschlagen |
title | Titel | Auf 200 Zeichen gekürzt |
tags[].name | Tags | Nur Namen, Farben werden nicht übernommen |
| (none) | imported:dub tag | Wird jedem importierten Link hinzugefügt |
domain, folderId, archived, others | Nicht gelesen | Siehe die nächsten zwei Abschnitte |
Alles andere an einem Dub-Link fällt unter den Tisch: Beschreibung, Social-Preview-Bild, Ablaufdatum, Passwort, Geo- und Geräte-Targeting, UTM-Felder, iOS- und Android-Ziele, Flags für Conversion-Tracking. Hängt ein Link von einem davon ab, bauen Sie ihn nach dem Import neu auf. Elido hat eigene Smart-Link-Regeln für Targeting, aber nichts überträgt Dubs Regeln automatisch.
Ordner, archivierte Links und Domains
Drei Dub-Konzepte werden nicht behandelt, und jedes kann überraschen.
Ordner. Im Link-Schema von Dub erscheint ein Ordner nur als folderId-String. Der Importer hat kein Feld dafür und macht keinen zweiten Aufruf, um Ordnernamen aufzulösen. Elido hat Tags, keine Ordner, ein künftiger Importer müsste sie also ebenfalls abflachen. Heute geht die Ordnerstruktur verloren. Wenn sie wichtig ist, notieren Sie vor dem Start den Ordner zu jedem Slug und taggen Sie den importierten Stapel (Filter auf imported:dub) dann von Hand oder per API.
Archivierte Links. Der List-Endpunkt von Dub nimmt einen Parameter showArchived mit dem Standardwert false. Der Importer setzt ihn nie, archivierte Links werden also weder geliefert noch importiert. Das ist ein vernünftiger Standard für eine Migration, aber Sie sollten es wissen, wenn Sie alte Kampagnenlinks absichtlich archiviert halten.
Link-Domains. Ein Dub-Workspace kann Links auf mehreren Domains enthalten. Der Importer liest alle, ignoriert das Feld domain und legt jeden Link auf der einen Elido-Domain an, die Sie wählen. Wenn zwei Dub-Domains denselben Key verwenden, gerät der zweite in einen Konflikt. Die Konfliktstrategie entscheidet, was dann passiert, wählen Sie sie also mit Blick darauf.
Konflikte, Limits und der Worker-Vertrag
Beim Start des Jobs wählen Sie eine Konfliktstrategie:
suffixprobiertmylink-2,mylink-3und so weiter bis-50, gibt dann bei diesem Link auf und zählt ihn als fehlgeschlagen.skiplässt den vorhandenen Elido-Link in Ruhe und protokolliert den Slug als übersprungen.failstoppt den gesamten Job beim ersten Konflikt.
Pro Lauf stoppt der Worker bei 50.000 Links (MaxLinksPerImport) oder nach 30 Minuten (ImportRunBudget), je nachdem, was zuerst eintritt. Der Fortschritt wird alle 50 Links gespeichert, und das Dashboard fragt ihn ab. Das Fehlerprotokoll behält höchstens 1.000 Einträge. Jede Slug-Prüfung ist ein indizierter Lookup auf (domain_id, slug).
Ich habe Dub-Importe nicht gegen einen großen Account gebenchmarkt und nenne daher keinen Wert für Links pro Minute. Die Schleife ist eine HTTP-Seite mit 100 Links, gefolgt von 100 sequenziellen Inserts, die Dauer skaliert also mit der Antwortgeschwindigkeit von Dub und mit Ihrer Datenbank. Testen Sie zuerst mit einem kleinen Workspace.
Token-Handhabung und was bei einem Deploy passiert
Der Key reist im Request-Body von POST /imports/dub, liegt im Speicher des laufenden Workers und wird nie gespeichert: Das source_token_id der Job-Zeile bleibt leer. Nur der optionale Text workspace_id landet in der Spalte source_filter des Jobs.
Der Worker läuft in einer vom HTTP-Request abgekoppelten Goroutine mit context.WithoutCancel. Das hält ihn nach der Antwort am Leben, und es bedeutet auch, dass ein Deploy oder Neustart ihn mitten im Lauf beendet. Ein Scheduler-Job läuft alle 5 Minuten und markiert jeden Import im Status running, der 30 Minuten lang keinen Fortschritt gemacht hat, als fehlgeschlagen. Ein erneuter Lauf ist sicher unter suffix (Sie erhalten -2-Kopien von allem, was schon importiert wurde) und unter skip (bereits importierte Slugs werden übersprungen). Ein Fortsetzen ab der letzten Seite gibt es noch nicht.
Die Linkliste in einem Demo-Workspace mit synthetischen Daten. Filtern Sie nach einem Import auf den Tag imported:dub, um den Stapel zu finden.
Eine kurze Checkliste vor dem Start
- Erstellen Sie in Ihrem Dub-Workspace einen schreibgeschützten API-Key.
- Heben Sie die Archivierung aller Links auf, die Sie behalten wollen, und notieren Sie jede Ordnerstruktur, auf die Sie angewiesen sind.
- Fügen Sie die Ziel-Domain in Elido hinzu und wählen Sie
skipodersuffixin dem Wissen, dass alle Dub-Domains in dieser einen zusammenfallen. - Starten Sie den Import über die Integrationsseite im Dashboard oder per
POST /imports/dubmittoken,target_domain_idundconflict_strategy. - Prüfen Sie Slugs und Ziele stichprobenartig gegen Dub und aktualisieren Sie dann das DNS für jede eigene Custom Domain. Das Bitly-Cutover-Playbook behandelt die DNS-Reihenfolge, die bei jedem Anbieter dieselbe ist.
Wenn Sie noch entscheiden, ob Sie überhaupt wechseln, vergleicht Elido vs Dub Pläne und Funktionen, und DSGVO für URL-Shortener erklärt die Seite der Datenresidenz. Die anbieterbezogene Anleitung finden Sie auf der Dub-Migrationsseite.
Weitere Beiträge im Blog
- Elido vs Dub: SSO, Conversion-Tracking, EU-Residenz
- Dub-Alternativen: 6 Link-Management-Plattformen im Vergleich
- Die Bitly-Migration ausliefern: ein Worker, ein Token, 30 Minuten Budget
- Die Rebrandly-Migration ausliefern: Paginierung mit 25 pro Seite
- Die Short.io-Migration ausliefern: Paginierung pro Domain mit 150 pro Seite
Häufig gestellte Fragen
Was bringt der Dub.co-Importer in Elido mit?
Für jeden gelesenen Link übernimmt der Importer den Slug (den Dub-Key), die Ziel-URL, den Titel (auf 200 Zeichen gekürzt) und die Tag-Namen und fügt einen Tag imported:dub hinzu. Aus dem Dub-Datensatz wird sonst nichts gelesen: keine Beschreibung, kein Ablaufdatum, kein Passwort, keine UTM-Felder, keine Targeting-Regeln und keine Klickzahlen.
Bleiben meine Dub-Ordner beim Import erhalten?
Nein. Der List-Endpunkt von Dub liefert pro Link nur eine folderId, nicht den Ordnernamen, und der Importer schlägt Ordner nicht nach. Importierte Links behalten ihre Tags, kommen aber ohne Ordnerinformation an. Wenn Sie auf Ordner angewiesen sind, notieren Sie vor dem Start, welcher Tag oder welches Slug-Muster zu welchem Ordner gehört.
Werden archivierte Dub-Links importiert?
Standardmäßig nicht. Der List-Endpunkt von Dub lässt archivierte Links aus, sofern kein Parameter showArchived gesendet wird, und der Importer sendet ihn nicht. Heben Sie die Archivierung für alles auf, was Sie behalten wollen, oder legen Sie es von Hand neu an, bevor Sie den Import starten.
Kann ich den Import auf einen Dub-Workspace beschränken?
Ein Dub-API-Key gehört zu genau einem Workspace, der Key begrenzt also bereits, was aufgelistet wird. Die API akzeptiert ein optionales Feld workspace_id und reicht es als Query-Parameter an Dub weiter, aber die dokumentierten List-Parameter von Dub enthalten es nicht. Das Dashboard-Formular hat kein solches Feld, behandeln Sie es also als wirkungslos.
Wie viele Links kann ein Lauf importieren, und wie lange darf er dauern?
Ein Lauf endet bei 50.000 Links oder 30 Minuten, je nachdem, was zuerst eintritt, und liest 100 Links pro Anfrage. Darüber wird der Job mit einer Budget-Meldung an der Stelle, an der er stoppte, als fehlgeschlagen markiert. Ein Lauf, der 30 Minuten lang keinen Fortschritt macht, wird ebenfalls auf fehlgeschlagen gesetzt.
Funktioniert der Importer mit einem selbst gehosteten Dub?
Derzeit nicht. Die API-Basis ist im Code fest auf https://api.dub.co gesetzt, und es gibt weder eine Einstellung noch eine Umgebungsvariable, um sie zu ändern. Eine selbst gehostete Dub-Instanz lässt sich über das Dashboard nicht ansteuern. Exportieren Sie Ihre Links aus Ihrer eigenen Datenbank und legen Sie sie über die Elido-API neu an.
Elido testen
URL einfügen, kurzer Link in Sekunden
Kein Konto nötig. Link bleibt 30 Tage aktiv. Konto erstellen, um ihn dauerhaft zu behalten.
Kostenlos, keine Anmeldung erforderlich · 2 pro Tag