Du hittar äntligen en plattform som är värd att integrera med … och så finns det ingen API-dokumentation. Så du gör som alla andra: öppnar DevTools, klickar runt, kopierar URL:er till en rörig anteckning och hoppas att du inte missade den enda endpointen som spelar roll.
Den här automatiseringen för endpoint-upptäckt slår först mot automationsbyggare, men growth marketers och byråteam känner av den också. Om du någon gång har försökt koppla ett “utan-API”-verktyg till din stack så vet du smärtan. Resultatet här är enkelt: förvandla okända interna endpoints till en korrekt formaterad Excel-fil som du kan dela.
Du får lära dig hur det här arbetsflödet skannar en webbplats, granskar dess JavaScript, extraherar sannolika API-sökvägar (på två sätt) och sparar det slutliga kalkylarket i Google Drive så att det blir enkelt att granska och samarbeta kring.
Så fungerar den här automatiseringen
Här är hela arbetsflödet du kommer att sätta upp:
n8n Workflow Template: Google Drive till Excel, ordnade dolda endpoints
flowchart LR
subgraph sg0["Start API Discovery Flow"]
direction LR
n0@{ icon: "mdi:robot", form: "rounded", label: "Auto-fixing Output Parser", pos: "b", h: 48 }
n1@{ icon: "mdi:play-circle", form: "rounded", label: "Start API Discovery", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Configuration", pos: "b", h: 48 }
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch Website HTML"]
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/html.dark.svg' width='40' height='40' /></div><br/>Extract URLs of JS files"]
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split URLs of JS files", pos: "b", h: 48 }
n6@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Keep Relevant JS Files", pos: "b", h: 48 }
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch JS Content"]
n8@{ icon: "mdi:swap-vertical", form: "rounded", label: "Extract API Endpoints", pos: "b", h: 48 }
n9@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Endpoints Count", pos: "b", h: 48 }
n10@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Endpoints", pos: "b", h: 48 }
n11@{ icon: "mdi:cog", form: "rounded", label: "Remove Duplicates", pos: "b", h: 48 }
n12["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>AI Endpoints Analysis"]
n13@{ icon: "mdi:swap-vertical", form: "rounded", label: "Add Source Metadata", pos: "b", h: 48 }
n14@{ icon: "mdi:cog", form: "rounded", label: "Reference for Source Metadata", pos: "b", h: 48 }
n15@{ icon: "mdi:swap-vertical", form: "rounded", label: "Process Each Analyzed File", pos: "b", h: 48 }
n16@{ icon: "mdi:swap-vertical", form: "rounded", label: "Format AI Results", pos: "b", h: 48 }
n17@{ icon: "mdi:cog", form: "rounded", label: "Prepare Endpoints File(s)", pos: "b", h: 48 }
n18@{ icon: "mdi:cog", form: "rounded", label: "Save Endpoints File(s)", pos: "b", h: 48 }
n19@{ icon: "mdi:swap-vertical", form: "rounded", label: "Pass File Name, No Binary", pos: "b", h: 48 }
n20["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Merge AI Analysis & File Name"]
n21@{ icon: "mdi:robot", form: "rounded", label: "Create Endpoints Regex With AI", pos: "b", h: 48 }
n22@{ icon: "mdi:brain", form: "rounded", label: "Regex Generation LLM", pos: "b", h: 48 }
n23@{ icon: "mdi:wrench", form: "rounded", label: "Validate LLM Regex", pos: "b", h: 48 }
n24@{ icon: "mdi:robot", form: "rounded", label: "Parse AI Regex Output", pos: "b", h: 48 }
n30["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Merge Initial AI Analysis & .."]
n31@{ icon: "mdi:swap-vertical", form: "rounded", label: "Prepare Data for Regex Extra..", pos: "b", h: 48 }
n32@{ icon: "mdi:swap-vertical", form: "rounded", label: "Execute LLM Regex", pos: "b", h: 48 }
n33@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split LLM-extracted Endpoints", pos: "b", h: 48 }
n34@{ icon: "mdi:cog", form: "rounded", label: "Remove LLM Endpoints Duplica..", pos: "b", h: 48 }
n35["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Merge Original And LLM Endpo.."]
n36["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Final Merge with Enriched Fi.."]
n37@{ icon: "mdi:cog", form: "rounded", label: "Sort Merged Endpoints", pos: "b", h: 48 }
n38@{ icon: "mdi:swap-vertical", form: "rounded", label: "Reorder Output Fields", pos: "b", h: 48 }
n39@{ icon: "mdi:cog", form: "rounded", label: "Export Comparison Results To..", pos: "b", h: 48 }
n40@{ icon: "mdi:cog", form: "rounded", label: "Prepare Source & File Name f..", pos: "b", h: 48 }
n41@{ icon: "mdi:cog", form: "rounded", label: "Insufficient Endpoints", pos: "b", h: 48 }
n2 --> n3
n10 --> n11
n7 --> n8
n32 --> n33
n16 --> n17
n11 --> n35
n3 --> n4
n23 -.-> n21
n13 --> n15
n13 --> n20
n1 --> n2
n22 -.-> n21
n22 -.-> n0
n12 --> n13
n9 --> n10
n9 --> n14
n9 --> n41
n8 --> n9
n24 -.-> n0
n38 --> n39
n37 --> n38
n6 --> n7
n18 --> n15
n5 --> n6
n4 --> n5
n0 -.-> n21
n19 --> n20
n17 --> n18
n15 --> n19
n15 --> n16
n20 --> n30
n20 --> n21
n14 --> n12
n33 --> n34
n21 --> n30
n34 --> n35
n34 --> n40
n35 --> n36
n31 --> n32
n36 --> n37
n40 --> n36
n30 --> n31
end
subgraph sg1["Regex Validation Start Flow"]
direction LR
n25@{ icon: "mdi:play-circle", form: "rounded", label: "Regex Validation Start", pos: "b", h: 48 }
n26@{ icon: "mdi:cog", form: "rounded", label: "Load Reference Endpoints", pos: "b", h: 48 }
n27@{ icon: "mdi:cog", form: "rounded", label: "Extract Endpoints File Text", pos: "b", h: 48 }
n28["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Merge Regex, File Name & Ref.."]
n29@{ icon: "mdi:swap-vertical", form: "rounded", label: "Evaluate LLM Regex", pos: "b", h: 48 }
n25 --> n26
n25 --> n28
n26 --> n27
n27 --> n28
n28 --> n29
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n1,n25 trigger
class n0,n21,n24 ai
class n22 aiModel
class n23 ai
class n6,n9 decision
class n3,n7,n12 api
classDef customIcon fill:none,stroke:none
class n3,n4,n7,n12,n20,n30,n35,n36,n28 customIcon
Varför det här är viktigt: hitta endpoints när dokumentation saknas
Om en plattform inte publicerar ett API har du fortfarande ett jobb att göra. Du behöver data. Du behöver åtgärder (skapa, uppdatera, söka). Och de flesta moderna webbappar anropar redan interna endpoints i bakgrunden. Det svåra är att upptäcka dem på ett tillförlitligt sätt utan att lägga hela eftermiddagen på att leka detektiv. Att manuellt skanna sidkällan, gräva i bundlat JavaScript och sedan kopiera “kanske-endpoints” till anteckningar är utmattande – och ärligt talat är det lätt att lura sig själv att man är klar när man bara hittat det uppenbara.
Friktionen växer snabbt. Här är var det brukar falla isär i verkliga projekt.
- Endpoint-listor blir ofullständiga eftersom du bara inspekterade ett sidläge eller missade en JavaScript-bundle som laddas dynamiskt.
- Copy-paste-“research” går inte att dela, så kollegor gör om jobbet (eller levererar en integration byggd på gissningar).
- Du får URL:er, men ingen kontext, så du vet fortfarande inte vilken metod du ska använda eller vilka parametrar som är viktiga.
- När appen uppdaterar sin frontend-bundle blir dina anteckningar inaktuella och du får börja jakten igen.
Vad du bygger: en repeterbar pipeline för endpoint-upptäckt
Det här arbetsflödet gör endpoint-upptäckt till en repeterbar process som du kan köra när du behöver. Det börjar med en mål-URL, laddar ner webbplatsens HTML och plockar ut länkade JavaScript-filer. Därefter filtrerar det fram relevanta script, laddar ner innehållet i varje fil och extraherar potentiella API-sökvägar med en bred, fördefinierad regex så att du inte råkar missa URL:er som spelar roll. Sedan lägger det till en andra metod: AI-assisterad granskning som läser JavaScript-strukturen, identifierar sannolika endpoints och genererar regex-mönster per fil när den generiska extraktionen blir för brusig. Till sist slår det ihop resultaten, tar bort dubbletter, berikar outputen med källmetadata och exporterar allt till en XLSX-fil som sparas i Google Drive.
I praktiken matar du in en webbplats. Du får tillbaka en strukturerad endpoint-inventering. Du kan sortera, filtrera och dela den som vilket kalkylark som helst, vilket gör uppföljningsarbetet (testa endpoints, kartlägga auth, bygga automationer) mycket snabbare.
Det här bygger du
| Det som automatiseras | Det du uppnår |
|---|---|
|
|
Förväntade resultat
Säg att en webbplats laddar ungefär 25 JavaScript-filer och att du lägger cirka 6 minuter per fil på att skumma, söka efter “/api”, kopiera URL:er och försöka undvika dubbletter. Det är ungefär 2,5 timmar, och du har fortfarande inga beskrivningar. Med det här arbetsflödet ställer du in mål-URL:en på någon minut, låter det hämta och analysera script, och granskar sedan en enda XLSX i Google Drive. De flesta team får tillbaka de där två timmarna redan vid första körningen.
Innan du börjar
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen drift om du föredrar det (Hostinger fungerar bra)
- Google Drive för att lagra den slutliga Excel-filen.
- OpenRouter (LLM-åtkomst) för att driva AI-analysen av endpoints.
- OpenRouter API-nyckel (hämta den i din OpenRouter-dashboard)
Kunskapsnivå: Medel. Du kopplar konton, klistrar in en API-nyckel och justerar ett par parametrar som mål-URL och filtreringsregler.
Vill du att någon bygger detta åt dig? Prata med en automationsexpert (gratis 15-minuters konsultation).
Steg för steg
Du triggar upptäckten. Kör manuellt när du undersöker en ny plattform, eller koppla det till en webhook om du vill trigga skanningar från ett annat verktyg (till och med ett snabbt Telegram-meddelande kan användas som startpunkt i det här arbetsflödet).
Arbetsflödet kartlägger frontend. Det hämtar målwebbplatsens HTML, plockar ut länkar till JavaScript-filer, delar upp dem i en lista och filtrerar fram de script som mest sannolikt innehåller interna anrop (bundles, app-script och andra “riktiga” tillgångar).
Endpoints extraheras på två sätt. Först kör det en fördefinierad regex-metod för att brett fånga URL-liknande strängar, och tar sedan bort dubbletter. Därefter granskar en AI-agent JavaScript-innehållet för att identifiera sannolika API-endpoints och generera filspecifika regex-mönster, och validerar samt förfinar sedan dessa mönster mot referensdata.
Du får en korrekt formaterad leverans. Det slår ihop den ursprungliga extraktionen med de AI-assisterade resultaten, berikar raderna med källmetadata, sorterar den kombinerade listan, exporterar till XLSX och lagrar kalkylarket i Google Drive för delning och samarbete.
Du kan enkelt ändra filtreringsreglerna för JavaScript-filer för att fokusera på specifika kataloger eller mönster utifrån dina behov. Se den fullständiga implementeringsguiden nedan för anpassningsalternativ.
Steg-för-steg-implementeringsguide
Steg 1: konfigurera den manuella triggern
Konfigurera den manuella triggern och definiera målwebbplatsens parametrar som driver hela discovery-flödet.
- Lägg till noden Manual Discovery Trigger som startpunkt för workflowet.
- I Setup Parameters, ställ in URL på
. - I Setup Parameters, ställ in User-Agent på
Mozilla/5.0 (compatible; API-Discovery-Bot/1.0).
Steg 2: koppla webbplatsinhämtning och JavaScript-discovery
Hämta webbplatsens HTML, extrahera JavaScript-länkar och ladda ner relevanta JS-filer för endpoint-extrahering.
- I Retrieve Site HTML, ställ in URL på
{{ $json.URL }}och aktivera Send Headers. - I header-parametrarna för Retrieve Site HTML, ställ in User-Agent på
{{ $json['User-Agent'] }}. - Konfigurera Pull JS File Links för att extrahera JS URLs från script[src] med Operation =
extractHtmlContent. - Ställ in Split JS Links Field to Split Out på
JS URLs. - I Filter Relevant JS, behåll befintliga OR-filtervillkor som
{{ $json['JS URLs'].startsWith('/') || $json['JS URLs'].startsWith('./') }}och{{ ($('Setup Parameters').first().json.URL).extractDomain() }}. - I Download JS Content, ställ in URL på
{{ !!$json['JS URLs'].extractDomain() ? $json['JS URLs'].replace(/^\/\/, 'https://') : ($('Setup Parameters').first().json.URL+'/'+$json['JS URLs']).replaceAll(/(?.
Steg 3: konfigurera endpoint-extrahering och initial validering
Tolka JS-innehåll till potentiella API-endpoints, validera antal och dela upp i individuella objekt.
- I Derive API Paths, ställ in Endpoints på
{{ [...$json.data.replace(/\\u002[Ff]/g, '/').matchAll(/(?:["'`])((?:https?:\/\/[^\/\s"'`]+)?\/[^\s"'`]*?)(?:["'`])/g)].map(m => m[1].split('?')[0].replace(/\/\*+$/, '')).filter(url => url.includes('/') && url.length > 2 && !url.match(/\.(js|css|png|jpg|gif|svg|ico)$/i)) }}. - I Derive API Paths, ställ in JS på
trueoch Source på{{ $('Split JS Links').item.json['JS URLs'] }}. - I Validate Endpoint Count, behåll villkoret
{{ $json.Endpoints.length }}greater than4. - Validate Endpoint Count skickar output parallellt till både Split Endpoint Items och Source Metadata Anchor.
- I Split Endpoint Items, ställ in Field to Split Out på
Endpointsoch Fields to Include påJS, Source. - Koppla Remove Duplicate Paths direkt efter Split Endpoint Items för att avduplicera den råa endpoint-listan.
Steg 4: konfigurera AI-granskning av endpoints och filhantering
Använd OpenRouter för att analysera JS-innehåll, lägga till källmetadata och skriva AI-resultat till filer för efterföljande regex-generering.
- I AI Endpoint Review, behåll URL som
https://openrouter.ai/api/v1/chat/completionsoch JSON-body som inkluderar{{ JSON.stringify($json.data) }}. - Behörighet krävs: anslut era openRouterApi-credentials i AI Endpoint Review.
- I Append Source Metadata, ställ in Source på
{{ $('Source Metadata Anchor').item.json.Source }}. - Append Source Metadata skickar output parallellt till både Batch Each Analysis och Combine Analysis with Name.
- I Format AI Findings, ställ in Filename på
=file{{$node["Batch Each Analysis"].context["currentRunIndex"].toString().padStart(2, '0');}}.txtoch choices[0].message.content på{{ $json?.choices[0]?.message?.content || $json?.choices[0]?.message?.reasoning }}. - I Build Endpoint Files, ställ in Operation på
toTextoch Binary Property Name på=data. - I Write Endpoint Files, ställ in File Name på
{{ $binary.data.fileName }}.
Steg 5: konfigurera regex-generering och validering
Generera regex-uttryck med AI, validera dem mot sparade filer och extrahera AI-drivna endpoints.
- I Generate Regex via AI, behåll Text som
Here is the file name: {{ $json.fileName }} ...och säkerställ att Has Output Parser är aktiverat. - Öppna Regex LLM Engine och ställ in Model på
anthropic/claude-3.7-sonnet. - Behörighet krävs: anslut era openRouterApi-credentials i Regex LLM Engine.
- Generate Regex via AI använder Self-Healing Output Parser, Validate AI Regex och Parse Regex Response som AI-subnoder—lägg till credentials i Regex LLM Engine (den överordnade språkmodellen), inte i subnoderna.
- Combine Analysis with Name skickar output parallellt till både Merge AI Review & Agent och Generate Regex via AI.
- I Prepare Data for Regex, ställ in data på
{{ $json.choices[0].message.content }}och output.n8nexpression på{{ !!$json?.output?.n8nexpression ? $json?.output?.n8nexpression : "" }}. - I Run AI Regex, ställ in Endpoints på
{{ $evaluateExpression($json.output.n8nexpression) }}och LLM påtrue. - I Split AI Endpoints, ställ in Field to Split Out på
Endpointsoch Fields to Include påLLM, fileName, Source. - Start Regex Validation skickar output parallellt till både Load Reference Files och Merge Regex and Reference för att validera AI-genererad regex.
- I Evaluate Regex Match, ställ in Evaluation results på
{{ $evaluateExpression($json['query.n8nexpression']) }}.
Steg 6: slå ihop, berika och exportera resultat
Kombinera original- och AI-endpoints, berika metadata och exportera den slutliga datamängden till XLSX.
- Remove AI Duplicates skickar output parallellt till både Combine Original and AI och Prep Source Name Merge.
- I Combine Original and AI, behåll Join Mode som
keepEverythingoch Fields to Match somEndpoints, Source. - I Enrich Merge by Source, behåll Join Mode som
enrichInput1och Fields to Match somSource. - I Sort Combined Endpoints, sortera på fileName och därefter Endpoints.
- I Reformat Output Fields, mappa Endpoints, JS, Source, fileName och LLM till sina aktuella värden med uttryck som
{{ $json.Endpoints }}. - I Export Results to XLSX, ställ in File Name på
api_comparison.xlsxoch aktivera Header Row.
Steg 7: testa och aktivera ert workflow
Kör ett fullständigt test för att verifiera endpoint-discovery och säkerställa att utdatafiler genereras som förväntat.
- Klicka på Execute Workflow för att köra Manual Discovery Trigger med er konfigurerade URL.
- Bekräfta att Write Endpoint Files skapar filer och att Export Results to XLSX genererar
api_comparison.xlsxmed endpoint-rader. - Verifiera att AI-drivna output finns genom att kontrollera LLM-värden i Reformat Output Fields.
- När resultaten ser korrekta ut, slå om workflowet till Active för produktionsanvändning.
Felsökningstips
- Google Drive-inloggningar kan löpa ut eller kräva specifika behörigheter. Om något skapar fel, kontrollera först Google-kopplingen i n8n:s lista över Credentials och bekräfta sedan åtkomst till Drive-mappen.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om efterföljande noder misslyckas på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in din tonalitet tidigt, annars kommer du att redigera output för alltid.
Snabba svar
Cirka 30 minuter om dina konton och API-nycklar är klara.
Nej. Du klistrar in en URL, kopplar inloggningar och justerar prompter eller filter om du vill ha mer träffsäkra resultat.
Ja. n8n har ett gratis alternativ för egen drift och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volymer. Du behöver också räkna in OpenRouter/LLM API-användning, vilket vanligtvis är några cent per körning beroende på hur många JavaScript-filer som analyseras.
Två alternativ: n8n Cloud (hanterat, enklast uppsättning) eller egen drift på en VPS. För egen drift är Hostinger VPS prisvärd och hanterar n8n bra. Egen drift ger dig obegränsade körningar men kräver grundläggande serveradministration.
Ja, och det bör du förmodligen. Du kan strama åt eller bredda vad som skannas genom att ändra logiken i “Filter Relevant JS” och värdena i “Setup Parameters”, och du kan byta AI-modellerna som används i noderna för AI Agent/OpenRouter chat model. Vanliga justeringar är att fokusera på ett specifikt sökvägsmönster som “/api/” eller “/v1/”, begränsa antalet JavaScript-filer som bearbetas och uppdatera AI-prompten så att den outputar fält som matchar teamets kalkylarksformat.
Oftast handlar det om behörigheter. Återanslut Google Drive i n8n credentials och bekräfta sedan att Drive/mappen du skriver till är åtkomlig för det Google-kontot. Om arbetsflödet fungerade en gång och plötsligt misslyckas kan token ha löpt ut eller återkallats. Kontrollera också om din organisation blockerar tredjepartsappar via OAuth.
Det beror främst på hur många JavaScript-filer målwebbplatsen laddar och hur tung AI-granskningen är, men det är vanligt att skanna några dussin JS-filer per körning.
För just det här jobbet: ja, i de flesta fall. Zapier och Make är utmärkta för raka “app A till app B”-flöden, men det här kräver mer förgrening, batchning, filhantering och iterativ AI-validering än de verktygen hanterar bekvämt. n8n ger dig också ett alternativ för egen drift, vilket spelar roll om du vill ha obegränsade körningar eller arbetar med känslig research. Den största skillnaden är flexibilitet: du kan justera parsinglogik, spara mellanliggande filer och slå ihop flera extraktionsstrategier utan att betala extra per steg. Om du är osäker, prata med en automationsexpert så gör vi en rimlighetscheck av ditt användningsfall.
När det här väl är uppsatt slutar endpoint-upptäckt att vara en engångsstress och blir en repeterbar tillgång. Du får ett kalkylark du kan lita på, dela och bygga vidare på.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.