Kampagnen
LinkedIn-Kampagnen, ihre Sequenzen und Kennzahlen lesen
Kampagnen auflisten
/v1/campaignsread:campaignsRecht: Übersicht und Statistiken ansehenliestNeueste zuerst, wie die Kampagnenliste der App. progress zählt die Leads in der Sequenz in drei Gruppen (offen, mit Ergebnis, abgebrochen) und rechnet den Fortschritt wie die Liste. Eine Lead-Anzahl aus der Kampagnenzeile gibt es bewusst nicht (sie ist dort oft veraltet); die gezählte steht in GET /v1/campaigns/{id}. Sichtbar sind nur Kampagnen auf LinkedIn-Konten, auf die die Person hinter dem Key Zugriff hat.
Query-Parameter
limitintegerab 1bis 100Einträge pro Seite (Standard 25, höchstens 100)
cursorstringmax. 200 ZeichenWert aus meta.next_cursor der vorigen Seite
statusListe aus stringEin oder mehrere Status, kommagetrennt
draftactivesentpausedcompletedstoppedarchivedqstringmax. 200 ZeichenTeil des Namens (Groß/Klein egal)
Felder der Antwort
idstring (uuid)ID der Kampagne
namestringName der Kampagne
statusstringStatus der Kampagne, z. B. draft (Entwurf), active (läuft), paused, completed, stopped, archived
draftactivesentpausedcompletedstoppedarchivedorchestration_statusstring, kann null seinStand der Ausführung: draft, scheduled, running, paused, completed, failed, stopped
channelsListe aus stringKanäle, z. B. linkedin
campaign_typestring, kann null seinArt aus den Schritten der Sequenz: connect_only (Vernetzen), message_only (Nachrichten an Kontakte), connect_and_message
connect_onlymessage_onlyconnect_and_messagelinkedin_accountobject, kann null seinVerknüpftes LinkedIn-Konto (nur sichtbar, wenn der Key-Ersteller Zugriff auf das Konto hat)
Felder anzeigen
idstring (uuid)ID des LinkedIn-Kontos (siehe /v1/linkedin/accounts)
namestring, kann null seinAnzeigename des Kontos, null ohne Namen
connection_statusstring, kann null seinconnected, pending_verification, broken, disconnected, error
sequence_idstring (uuid), kann null seinVerknüpfte LinkedIn-Sequenz, null ohne Sequenz (z. B. Entwurf)
list_idstring (uuid), kann null seinLead-Liste, aus der die Kampagne befüllt wurde
progressobject, kann null seinFortschritt wie die Kampagnenliste der App. null, wenn die Zählung gerade nicht verfügbar ist.
Felder anzeigen
totalintegerEingeschriebene Leads (Zeilen der Sequenz)
openintegerNoch in Arbeit: pending, active, in_progress, waiting_for_connection, paused, paused_no_credits
resultintegerMit Ergebnis durch: completed, replied, booked
abortedintegerOhne Ergebnis raus: failed, excluded, stopped
stoppedintegerAbsichtlich gestoppt oder ausgeschlossen (Teil von aborted)
failedintegerEchte Fehlschläge (Teil von aborted)
percentinteger, kann null seinDurch, egal wie, in Prozent. 100 nur, wenn niemand mehr offen ist. null ohne Leads.
start_datestring (date-time), kann null seinStartdatum der Kampagne, null ohne Angabe
end_datestring (date-time), kann null seinEnddatum der Kampagne, null ohne Angabe
created_atstring (date-time), kann null seinAngelegt am
updated_atstring (date-time), kann null seinZuletzt geändert am
Mögliche Fehler
curl -X GET "https://api.dealsky.io/functions/v1/api/v1/campaigns" \
-H "X-API-Key: $DEALSKY_API_KEY"const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/campaigns", {
method: "GET",
headers: {
"X-API-Key": process.env.DEALSKY_API_KEY,
},
});
const { ok, data, error } = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.dealsky.io/functions/v1/api/v1/campaigns",
headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json()){
"ok": true,
"data": [
{
"id": "c7a1e2d3-4b5c-4d6e-8f70-1a2b3c4d5e6f",
"name": "Geschäftsführer Logistik NRW",
"status": "active",
"orchestration_status": "running",
"channels": [
"linkedin"
],
"campaign_type": "connect_and_message",
"linkedin_account": {
"id": "acc4e2d1-7b6a-4c5d-9e8f-0a1b2c3d4e5f",
"name": "Anna Beispiel",
"connection_status": "connected"
},
"sequence_id": "5e9f0a1b-2c3d-4e5f-8a6b-7c8d9e0f1a2b",
"list_id": "1f4e2d3c-7b6a-4c5d-9e8f-0a1b2c3d4e5f",
"progress": {
"total": 240,
"open": 150,
"result": 72,
"aborted": 18,
"stopped": 15,
"failed": 3,
"percent": 37
},
"start_date": "2026-10-01T08:00:00.000Z",
"end_date": null,
"created_at": "2026-09-30T14:12:00.000Z",
"updated_at": "2026-10-18T09:00:00.000Z"
}
],
"meta": {
"request_id": "req_7f3a…",
"next_cursor": null,
"has_more": false
}
}Eine Kampagne abrufen
/v1/campaigns/{id}read:campaignsRecht: Übersicht und Statistiken ansehenliestStammdaten, Status, verknüpftes LinkedIn-Konto, Sequenz mit Zeitplan und Tageslimits, Fortschritt und die gezählte Lead-Anzahl (ohne archivierte Leads, bei beendeten Kampagnen mit). Zeitplan und Limits stammen aus der Sequenz. Bei einem Entwurf stehen die Tageslimits noch im Aufbau der Kampagne (der Start überträgt sie in die Sequenz), dann gelten diese. Fehlt ein Wert, steht der Standard, den die App anzeigt und mit dem sie arbeitet.
Pfad-Parameter
idstring (uuid)PflichtID der Kampagne
Felder der Antwort
idstring (uuid)ID der Kampagne
namestringName der Kampagne
statusstringStatus der Kampagne, z. B. draft (Entwurf), active (läuft), paused, completed, stopped, archived
draftactivesentpausedcompletedstoppedarchivedorchestration_statusstring, kann null seinStand der Ausführung: draft, scheduled, running, paused, completed, failed, stopped
channelsListe aus stringKanäle, z. B. linkedin
campaign_typestring, kann null seinArt aus den Schritten der Sequenz: connect_only (Vernetzen), message_only (Nachrichten an Kontakte), connect_and_message
connect_onlymessage_onlyconnect_and_messagelinkedin_accountobject, kann null seinVerknüpftes LinkedIn-Konto (nur sichtbar, wenn der Key-Ersteller Zugriff auf das Konto hat)
Felder anzeigen
idstring (uuid)ID des LinkedIn-Kontos (siehe /v1/linkedin/accounts)
namestring, kann null seinAnzeigename des Kontos, null ohne Namen
connection_statusstring, kann null seinconnected, pending_verification, broken, disconnected, error
sequence_idstring (uuid), kann null seinVerknüpfte LinkedIn-Sequenz, null ohne Sequenz (z. B. Entwurf)
list_idstring (uuid), kann null seinLead-Liste, aus der die Kampagne befüllt wurde
progressobject, kann null seinFortschritt wie die Kampagnenliste der App. null, wenn die Zählung gerade nicht verfügbar ist.
Felder anzeigen
totalintegerEingeschriebene Leads (Zeilen der Sequenz)
openintegerNoch in Arbeit: pending, active, in_progress, waiting_for_connection, paused, paused_no_credits
resultintegerMit Ergebnis durch: completed, replied, booked
abortedintegerOhne Ergebnis raus: failed, excluded, stopped
stoppedintegerAbsichtlich gestoppt oder ausgeschlossen (Teil von aborted)
failedintegerEchte Fehlschläge (Teil von aborted)
percentinteger, kann null seinDurch, egal wie, in Prozent. 100 nur, wenn niemand mehr offen ist. null ohne Leads.
start_datestring (date-time), kann null seinStartdatum der Kampagne, null ohne Angabe
end_datestring (date-time), kann null seinEnddatum der Kampagne, null ohne Angabe
created_atstring (date-time), kann null seinAngelegt am
updated_atstring (date-time), kann null seinZuletzt geändert am
descriptionstring, kann null seinBeschreibung der Kampagne, null ohne Text
leads_countintegerLeads mit dieser Kampagne (gezählt, ohne archivierte; bei beendeten Kampagnen mit archivierten)
sequenceobject, kann null seinVerknüpfte LinkedIn-Sequenz, null ohne Sequenz
Felder anzeigen
idstring (uuid)ID der Sequenz
namestring, kann null seinName der Sequenz, null ohne Namen
categorystring, kann null seinconnection (Vernetzungskampagne) oder outreach
statusstring, kann null seinStatus der Sequenz, z. B. active, paused, draft
orchestration_statusstring, kann null seinrunning, paused, stopped, completed. Nur running versendet.
scheduleobject, kann null seinZeitplan der Sequenz. Fehlende Werte zeigen den Standard der App.
Felder anzeigen
timezonestringZeitzone des Zeitplans, Standard Europe/Berlin
active_daysListe aus integerAktive Wochentage, 0 = Sonntag, 1 = Montag … 6 = Samstag
activity_windowsListe aus objectUhrzeiten, in denen Aktionen laufen
Felder anzeigen
start_hourintegerBeginn des Fensters, volle Stunde (0 bis 23) in der Zeitzone des Zeitplans
end_hourintegerEnde des Fensters, volle Stunde, ausschließlich
max_leads_per_hourintegerNeue Leads je Stunde
daily_limitsobject, kann null seinTageslimits dieser Kampagne. Unabhängig davon gelten je LinkedIn-Konto 150 Vernetzungsanfragen pro Woche.
Felder anzeigen
connection_requestsintegerVernetzungsanfragen pro Tag (Standard 35)
messagesintegerNachrichten pro Tag (Standard 40)
profile_viewsintegerProfilbesuche pro Tag (Standard 60)
followsinteger, kann null seinFolgen pro Tag, null ohne eigenes Limit
likesinteger, kann null seinReaktionen auf Beiträge pro Tag, null ohne eigenes Limit
stop_conditionsobject, kann null seinSequenz stoppt bei Antwort bzw. Termin
Felder anzeigen
on_replybooleanSequenz stoppt für einen Lead, sobald er antwortet (Standard true)
on_bookingbooleanSequenz stoppt für einen Lead, sobald er einen Termin bucht (Standard true)
landing_pageobject, kann null seinPersönliche Landingpage je Lead, falls eingerichtet
Felder anzeigen
template_idstring (uuid), kann null seinVorlage der Landingpage, null ohne Vorlage
template_namestring, kann null seinName der Vorlage zum Zeitpunkt der Einrichtung
videostring, kann null seinVideo auf der Seite: static (für alle gleich), personalized (je Lead erzeugt), null ohne Video
staticpersonalized
Mögliche Fehler
curl -X GET "https://api.dealsky.io/functions/v1/api/v1/campaigns/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10" \
-H "X-API-Key: $DEALSKY_API_KEY"const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/campaigns/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10", {
method: "GET",
headers: {
"X-API-Key": process.env.DEALSKY_API_KEY,
},
});
const { ok, data, error } = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.dealsky.io/functions/v1/api/v1/campaigns/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10",
headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json()){
"ok": true,
"data": {
"id": "c7a1e2d3-4b5c-4d6e-8f70-1a2b3c4d5e6f",
"name": "Geschäftsführer Logistik NRW",
"status": "active",
"orchestration_status": "running",
"channels": [
"linkedin"
],
"campaign_type": "connect_and_message",
"linkedin_account": {
"id": "acc4e2d1-7b6a-4c5d-9e8f-0a1b2c3d4e5f",
"name": "Anna Beispiel",
"connection_status": "connected"
},
"sequence_id": "5e9f0a1b-2c3d-4e5f-8a6b-7c8d9e0f1a2b",
"list_id": "1f4e2d3c-7b6a-4c5d-9e8f-0a1b2c3d4e5f",
"progress": {
"total": 240,
"open": 150,
"result": 72,
"aborted": 18,
"stopped": 15,
"failed": 3,
"percent": 37
},
"start_date": "2026-10-01T08:00:00.000Z",
"end_date": null,
"created_at": "2026-09-30T14:12:00.000Z",
"updated_at": "2026-10-18T09:00:00.000Z",
"description": null,
"leads_count": 240,
"sequence": {
"id": "5e9f0a1b-2c3d-4e5f-8a6b-7c8d9e0f1a2b",
"name": "Geschäftsführer Logistik NRW Sequenz",
"category": "outreach",
"status": "active",
"orchestration_status": "running"
},
"schedule": {
"timezone": "Europe/Berlin",
"active_days": [
1,
2,
3,
4,
5
],
"activity_windows": [
{
"start_hour": 9,
"end_hour": 11
},
{
"start_hour": 13,
"end_hour": 15
},
{
"start_hour": 16,
"end_hour": 18
}
],
"max_leads_per_hour": 3
},
"daily_limits": {
"connection_requests": 25,
"messages": 30,
"profile_views": 40,
"follows": null,
"likes": null
},
"stop_conditions": {
"on_reply": true,
"on_booking": true
},
"landing_page": null
},
"meta": {
"request_id": "req_7f3a…"
}
}Schritte der Sequenz
/v1/campaigns/{id}/stepsread:campaignsRecht: Übersicht und Statistiken ansehenliestAlle Schritte der Sequenz in der Reihenfolge der App: erst der Hauptpfad, dann der Pfad nach angenommener Vernetzung (if_yes), dann der Pfad ohne Annahme (if_no), jeweils nach step_order. Texte stehen mit ihren Platzhaltern ({{first_name}}, {{company}}, {{landing_page_url}} …) so, wie die App sie zeigt; A/B-Varianten, Sprachnachrichten, Video und KI-Opener sind aufgeschlüsselt. Ohne verknüpfte Sequenz (Entwurf) ist die Liste leer.
Pfad-Parameter
idstring (uuid)PflichtID der Kampagne
Felder der Antwort
idstring (uuid)ID des Schritts
step_orderintegerReihenfolge innerhalb der Sequenz
branchstringmain = Hauptpfad, if_yes = nach Annahme der Vernetzung, if_no = nicht angenommen
mainif_yesif_noaction_typestringview_profile, send_connection, send_message, send_voice, send_video, ai_opener, react_post, comment_post, follow, wait, withdraw_connection
labelstringName des Schritts wie im Editor
wait_minutesintegerWartezeit in Minuten (bei wait), bzw. Frist bis zum Zurückziehen (bei withdraw_connection)
wait_minutes_maxinteger, kann null seinObergrenze der zufälligen Wartezeit
randomizedbooleanWartezeit wird je Lead zufällig zwischen wait_minutes und wait_minutes_max gewählt
textstring, kann null seinText mit Platzhaltern wie {{first_name}} oder {{landing_page_url}}; bei ai_opener die Begrüßung
variantsListe aus object, kann null seinA/B-Test: alle Varianten, A ist text
Felder anzeigen
keystringKennung der Variante, A ist der Haupttext, danach B, C …
textstringText der Variante mit Platzhaltern
audio_urlsListe aus string, kann null seinSprachnachrichten (je Lead wird eine zufällig gewählt)
videoobject, kann null seinVideo-Einstellungen, nur bei send_video
Felder anzeigen
modestringstatic: ein festes Video für alle, personalized: Video wird je Lead erzeugt
staticpersonalizedvideo_urlstring, kann null seinURL des festen Videos, nur bei static
thumbnail_urlstring, kann null seinVorschaubild des festen Videos, nur bei static
templatestring, kann null seinVorlage des personalisierten Videos, nur bei personalized
reactionsListe aus string, kann null seinReaktionen bei react_post (je Lead eine zufällig)
comment_image_urlstring, kann null seinBild zum Kommentar, nur bei comment_post und comment_post_image
ai_openerobject, kann null seinEinstellungen des KI-Openers ({{ai_opener}} im Text oder Schritt ai_opener). Leer = Standard.
ai_opener_questionstring, kann null seinFrage, die als zweite Nachricht folgt
Mögliche Fehler
curl -X GET "https://api.dealsky.io/functions/v1/api/v1/campaigns/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/steps" \
-H "X-API-Key: $DEALSKY_API_KEY"const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/campaigns/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/steps", {
method: "GET",
headers: {
"X-API-Key": process.env.DEALSKY_API_KEY,
},
});
const { ok, data, error } = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.dealsky.io/functions/v1/api/v1/campaigns/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/steps",
headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json()){
"ok": true,
"data": [
{
"id": "9a1b2c3d-0000-4000-8000-000000000001",
"step_order": 1,
"branch": "main",
"action_type": "view_profile",
"label": "Profil ansehen",
"wait_minutes": 0,
"wait_minutes_max": null,
"randomized": false,
"text": null,
"variants": null,
"audio_urls": null,
"video": null,
"reactions": null,
"comment_image_url": null,
"ai_opener": null,
"ai_opener_question": null
},
{
"id": "9a1b2c3d-0000-4000-8000-000000000002",
"step_order": 2,
"branch": "main",
"action_type": "send_connection",
"label": "Vernetzungsanfrage",
"wait_minutes": 0,
"wait_minutes_max": null,
"randomized": false,
"text": null,
"variants": null,
"audio_urls": null,
"video": null,
"reactions": null,
"comment_image_url": null,
"ai_opener": null,
"ai_opener_question": null
},
{
"id": "9a1b2c3d-0000-4000-8000-000000000003",
"step_order": 3,
"branch": "if_yes",
"action_type": "wait",
"label": "Warten",
"wait_minutes": 1440,
"wait_minutes_max": 1800,
"randomized": true,
"text": null,
"variants": null,
"audio_urls": null,
"video": null,
"reactions": null,
"comment_image_url": null,
"ai_opener": null,
"ai_opener_question": null
},
{
"id": "9a1b2c3d-0000-4000-8000-000000000004",
"step_order": 4,
"branch": "if_yes",
"action_type": "send_message",
"label": "Nachricht senden",
"wait_minutes": 0,
"wait_minutes_max": null,
"randomized": false,
"text": "Hallo {{first_name}}, danke fürs Vernetzen! Kurze Frage zu {{company}}: Wie gewinnt ihr gerade neue Kunden?",
"variants": [
{
"key": "A",
"text": "Hallo {{first_name}}, danke fürs Vernetzen! Kurze Frage zu {{company}}: Wie gewinnt ihr gerade neue Kunden?"
},
{
"key": "B",
"text": "Hi {{first_name}}, schön, dass wir vernetzt sind. Darf ich fragen, wie {{company}} aktuell Neukunden gewinnt?"
}
],
"audio_urls": null,
"video": null,
"reactions": null,
"comment_image_url": null,
"ai_opener": null,
"ai_opener_question": null
},
{
"id": "9a1b2c3d-0000-4000-8000-000000000005",
"step_order": 5,
"branch": "if_no",
"action_type": "withdraw_connection",
"label": "Anfrage zurückziehen",
"wait_minutes": 20160,
"wait_minutes_max": null,
"randomized": false,
"text": null,
"variants": null,
"audio_urls": null,
"video": null,
"reactions": null,
"comment_image_url": null,
"ai_opener": null,
"ai_opener_question": null
}
],
"meta": {
"request_id": "req_7f3a…"
}
}Statistik und Funnel einer Kampagne
/v1/campaigns/{id}/statsread:campaignsRecht: Übersicht und Statistiken ansehenliestGerechnet wie der Reiter „Statistiken“ der App, mit denselben Formeln: Vernetzungsanfragen gesendet und angenommen (Annahmequote), Antwortquote je Person (Nenner: Personen mit mindestens einer Nachricht, also Text, Sprache, Video oder InMail), Antworten je Nachricht (eine Antwort zählt für die letzte Nachricht davor), Termine (Lead-Status booked oder Termin gesetzt, je Person einmal), gesendet je Schritt und die Funnel-Zeilen in der Reihenfolge des Reiters. Landingpage-Besuche, Video-Aufrufe, CTA-Klicks und Buchungen gibt es, wenn die Sequenz eine Landingpage nutzt. Die Übersicht im Dashboard rechnet „erreicht“ anders (über den erreichten Schritt) und kann abweichen. Bei großen Kampagnen dauert die Antwort einige Sekunden.
Pfad-Parameter
idstring (uuid)PflichtID der Kampagne
Felder der Antwort
campaign_idstring (uuid)ID der Kampagne
sequence_idstring (uuid), kann null seinVerknüpfte Sequenz, null ohne Sequenz
sequence_categorystring, kann null seinconnection (Vernetzungskampagne) oder outreach, null ohne Sequenz
calculated_atstring (date-time)Zeitpunkt der Berechnung (die Zahlen werden bei jedem Aufruf neu gerechnet)
leadsobjectLeads der Kampagne
Felder anzeigen
totalintegerEingeschriebene Leads, sonst Leads der Kampagne (Bezugsgröße der Schritte)
in_campaignintegerLeads mit dieser Kampagne (gezählt)
in_sequenceintegerZeilen in der Sequenz
activeintegerZeilen, die noch laufen (active, waiting, pending, in_progress, waiting_for_connection)
completedintegerZeilen mit Status completed
repliedintegerZeilen mit Antwort (auch ohne vorherige Nachricht)
connectionsobjectVernetzung
Felder anzeigen
sentintegerLeads mit gesendeter Vernetzungsanfrage
acceptedintegerDavon angenommen
accepted_by_activityintegerAnnahmen laut Aktivitäten (Rückfall für Altdaten)
already_connectedintegerSchon vor der Kampagne vernetzt
connected_totalintegerAlle vernetzten Zeilen, mit und ohne Anfrage aus der Kampagne
acceptance_rateintegerAnnahmequote in Prozent
messages_sentintegerVersendete Nachrichten (Text, Sprache, Video, InMail), jede einzeln
repliesobjectAntworten
Felder anzeigen
messaged_peopleintegerPersonen mit mindestens einer Nachricht (Nenner)
replied_peopleintegerDavon geantwortet
reply_rateintegerAntwortquote je Person in Prozent
replied_before_first_messageintegerAntworten, die vor der ersten Nachricht der Sequenz kamen
unattributedintegerAntworten, die keiner gezeigten Nachricht zugeordnet sind
by_messageListe aus objectAntworten je Nachricht; eine Antwort zählt für die letzte Nachricht davor
Felder anzeigen
step_orderintegerSchritt der Nachricht (step_order)
labelstringName des Schritts wie im Reiter
sentintegerZeilen, an die diese Nachricht ging
repliedintegerAntworten nach genau dieser Nachricht
reply_rateinteger, kann null seinAntwortquote dieser Nachricht in Prozent, null ohne Versand
variantsListe aus objectA/B-Varianten mit Versand, leer ohne A/B-Test
Felder anzeigen
keystringKennung der A/B-Variante (A, B, …)
sentintegerVersand dieser Variante
repliedintegerAntworten nach dieser Variante
reply_rateinteger, kann null seinAntwortquote der Variante in Prozent, null ohne Versand
bookingsobjectTermine (Lead-Status booked oder Termin gesetzt, je Person einmal)
Felder anzeigen
peopleintegerPersonen mit Termin
baseinteger, kann null seinBezugsgröße (Angeschriebene), null wenn nicht sinnvoll
funnelListe aus objectFunnel-Zeilen in der Reihenfolge des Reiters
Felder anzeigen
kindstringstep: ausgeführter Schritt, pre_connected: schon vernetzt, accepted: Vernetzung angenommen, replied: geantwortet, booked: Termin
steppre_connectedacceptedrepliedbookedaction_typestring, kann null seinArt des Schritts, nur bei kind step
step_orderinteger, kann null seinSchritt (step_order), nur bei kind step
labelstringBeschriftung der Zeile wie im Reiter
countintegerAnzahl der Leads in dieser Stufe
baseintegerBezugsgröße der Zeile
conversion_rateinteger, kann null seinUmwandlung gegenüber der Zeile davor in Prozent
lead_statusobjectZeilen der Sequenz je Status, gruppiert wie der Reiter
Felder anzeigen
pendingintegerStatus pending (noch nicht gestartet)
activeintegerStatus active und in_progress
waitingintegerStatus waiting_for_connection und waiting
repliedintegerStatus replied
bookedintegerStatus booked
completedintegerStatus completed
stoppedintegerStatus stopped und excluded
failedintegerStatus failed
pausedintegerpaused und paused_no_credits (hat im Reiter keine eigene Zeile)
landing_pageobject, kann null seinNur wenn die Sequenz {{landing_page_url}} nutzt. Eindeutige Leads je Ereignis, Anteil an den Leads der Kampagne.
Felder anzeigen
visitsintegerLeads mit Seitenaufruf
video_viewsintegerLeads, die das Video gestartet haben
cta_clicksintegerLeads mit Klick auf einen Button
bookingsintegerLeads mit bestätigter Buchung über die Seite
visits_percentintegervisits in Prozent der Leads der Kampagne, gerundet
video_views_percentintegervideo_views in Prozent der Leads der Kampagne, gerundet
cta_clicks_percentintegercta_clicks in Prozent der Leads der Kampagne, gerundet
bookings_percentintegerbookings in Prozent der Leads der Kampagne, gerundet
Mögliche Fehler
curl -X GET "https://api.dealsky.io/functions/v1/api/v1/campaigns/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/stats" \
-H "X-API-Key: $DEALSKY_API_KEY"const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/campaigns/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/stats", {
method: "GET",
headers: {
"X-API-Key": process.env.DEALSKY_API_KEY,
},
});
const { ok, data, error } = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.dealsky.io/functions/v1/api/v1/campaigns/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/stats",
headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json()){
"ok": true,
"data": {
"campaign_id": "c7a1e2d3-4b5c-4d6e-8f70-1a2b3c4d5e6f",
"sequence_id": "5e9f0a1b-2c3d-4e5f-8a6b-7c8d9e0f1a2b",
"sequence_category": "outreach",
"calculated_at": "2026-10-18T09:15:00.000Z",
"leads": {
"total": 240,
"in_campaign": 240,
"in_sequence": 240,
"active": 150,
"completed": 40,
"replied": 30
},
"connections": {
"sent": 180,
"accepted": 72,
"accepted_by_activity": 70,
"already_connected": 12,
"connected_total": 84,
"acceptance_rate": 40
},
"messages_sent": 95,
"replies": {
"messaged_people": 80,
"replied_people": 24,
"reply_rate": 30,
"replied_before_first_message": 1,
"unattributed": 0,
"by_message": [
{
"step_order": 4,
"label": "Nachricht gesendet",
"sent": 80,
"replied": 23,
"reply_rate": 29,
"variants": [
{
"key": "A",
"sent": 41,
"replied": 13,
"reply_rate": 32
},
{
"key": "B",
"sent": 39,
"replied": 10,
"reply_rate": 26
}
]
}
]
},
"bookings": {
"people": 6,
"base": 80
},
"funnel": [
{
"kind": "step",
"action_type": "view_profile",
"step_order": 1,
"label": "Profil besucht",
"count": 230,
"base": 240,
"conversion_rate": null
},
{
"kind": "pre_connected",
"action_type": null,
"step_order": null,
"label": "Bereits vernetzt (12)",
"count": 12,
"base": 240,
"conversion_rate": null
},
{
"kind": "step",
"action_type": "send_connection",
"step_order": 2,
"label": "Kontaktanfrage",
"count": 180,
"base": 240,
"conversion_rate": null
},
{
"kind": "accepted",
"action_type": null,
"step_order": null,
"label": "Vernetzung angenommen",
"count": 72,
"base": 180,
"conversion_rate": 40
},
{
"kind": "step",
"action_type": "send_message",
"step_order": 4,
"label": "Nachricht gesendet",
"count": 80,
"base": 240,
"conversion_rate": null
},
{
"kind": "replied",
"action_type": null,
"step_order": null,
"label": "Geantwortet",
"count": 24,
"base": 80,
"conversion_rate": null
},
{
"kind": "booked",
"action_type": null,
"step_order": null,
"label": "Termin gebucht",
"count": 6,
"base": 80,
"conversion_rate": 25
}
],
"lead_status": {
"pending": 20,
"active": 60,
"waiting": 70,
"replied": 24,
"booked": 6,
"completed": 40,
"stopped": 15,
"failed": 3,
"paused": 2
},
"landing_page": null
},
"meta": {
"request_id": "req_7f3a…"
}
}Leads einer Kampagne mit ihrem Stand
/v1/campaigns/{id}/leadsread:campaignsRecht: Übersicht und Statistiken ansehenliestJe eingeschriebenem Lead der Stand in der Sequenz: Status, erreichter Schritt, Vernetzung, Antwort, letzte und nächste Aktion. Älteste Einschreibung zuerst. Leads, die über ein LinkedIn-Konto laufen, auf das die Person hinter dem Key keinen Zugriff hat, fehlen (wie in der App).
Pfad-Parameter
idstring (uuid)PflichtID der Kampagne
Query-Parameter
limitintegerab 1bis 100Einträge pro Seite (Standard 25, höchstens 100)
cursorstringmax. 200 ZeichenWert aus meta.next_cursor der vorigen Seite
statusListe aus stringStand in der Sequenz, kommagetrennt, z. B. replied,booked
pendingactivein_progresswaiting_for_connectionpausedpaused_no_creditscompletedrepliedbookedfailedexcludedstoppedconnection_statusListe aus stringVernetzungsstand, kommagetrennt
unknownnot_connectedpendingconnectedwithdrawn
Felder der Antwort
sequence_lead_idstring (uuid)Zeile des Leads in der Sequenz
lead_idstring (uuid)Lead (siehe /v1/leads/{id})
first_namestring, kann null seinVorname aus dem Lead, sonst aus der Sequenz-Zeile
last_namestring, kann null seinNachname aus dem Lead, sonst aus der Sequenz-Zeile
companystring, kann null seinFirma aus dem Lead, sonst aus der Sequenz-Zeile
linkedin_urlstring, kann null seinLinkedIn-Profil des Leads, null ohne Profil
statusstringStand in der Sequenz
pendingactivein_progresswaiting_for_connectionpausedpaused_no_creditscompletedrepliedbookedfailedexcludedstoppedcurrent_step_orderintegerZuletzt erreichter Schritt (step_order)
connection_statusstringVernetzungsstand: unknown, not_connected, pending (Anfrage offen), connected, withdrawn (Anfrage zurückgezogen)
unknownnot_connectedpendingconnectedwithdrawnconnection_requested_atstring (date-time), kann null seinVernetzungsanfrage gesendet am, null ohne Anfrage
connected_atstring (date-time), kann null seinVernetzt seit, null solange nicht vernetzt
replied_atstring (date-time), kann null seinErste Antwort am, null ohne Antwort
pause_reasonstring, kann null seinFreitext, warum der Lead gerade nicht weiterläuft, z. B. Tageslimit erreicht oder Warten auf Annahme. Enthält auch Normalzustände und interne Hinweise, ist also kein Fehlerkennzeichen. null ohne Grund
last_action_typestring, kann null seinArt der zuletzt ausgeführten Aktion, z. B. send_connection, send_message; null vor der ersten Aktion
last_action_atstring (date-time), kann null seinZeitpunkt der letzten Aktion
next_action_atstring (date-time), kann null seinFrühester Zeitpunkt der nächsten Aktion, null, wenn keine geplant ist
enrolled_atstring (date-time)In die Sequenz eingeschrieben am
Mögliche Fehler
curl -X GET "https://api.dealsky.io/functions/v1/api/v1/campaigns/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/leads" \
-H "X-API-Key: $DEALSKY_API_KEY"const res = await fetch("https://api.dealsky.io/functions/v1/api/v1/campaigns/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/leads", {
method: "GET",
headers: {
"X-API-Key": process.env.DEALSKY_API_KEY,
},
});
const { ok, data, error } = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.dealsky.io/functions/v1/api/v1/campaigns/5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10/leads",
headers={"X-API-Key": os.environ["DEALSKY_API_KEY"]},
)
print(res.json()){
"ok": true,
"data": [
{
"sequence_lead_id": "d4c3b2a1-1234-4abc-8def-0123456789ab",
"lead_id": "5b0c1e7a-3f1d-4a52-9c1e-8a7d2b6f4e10",
"first_name": "Max",
"last_name": "Mustermann",
"company": "Beispiel Logistik GmbH",
"linkedin_url": "https://www.linkedin.com/in/max-mustermann",
"status": "waiting_for_connection",
"current_step_order": 2,
"connection_status": "pending",
"connection_requested_at": "2026-10-16T10:04:00.000Z",
"connected_at": null,
"replied_at": null,
"pause_reason": null,
"last_action_type": "send_connection",
"last_action_at": "2026-10-16T10:04:00.000Z",
"next_action_at": "2026-10-19T09:00:00.000Z",
"enrolled_at": "2026-10-15T08:30:00.000Z"
}
],
"meta": {
"request_id": "req_7f3a…",
"next_cursor": null,
"has_more": false
}
}