Efterlevnadskrav förändras inte med buller och bång. De förändras tyst på en certifieringssida – och så får du reda på det för sent, under press, med ett förnyelsedatum som plötsligt är alldeles för nära.
Complianceansvariga känner trycket först. Men driftansvariga och byråägare som stöttar reglerade kunder hamnar i samma ryckiga räddningsinsats. Den här automatiseringen för spårning av complianceförändringar håller ett strukturerat register i GitLab och pingar teamet när något faktiskt förändras.
Du får lära dig vad arbetsflödet kontrollerar, hur det avgör ”förändring vs. ingen förändring” och hur du anpassar aviseringar så att rätt personer följer upp snabbt.
Så här fungerar automatiseringen
Här är det kompletta arbetsflödet du kommer att sätta upp:
n8n Workflow Template: ScrapeGraphAI till GitLab, spåra ändringar i efterlevnad
flowchart LR
subgraph sg0["Daily Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Daily Trigger", pos: "b", h: 48 }
n1["<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/code.svg' width='40' height='40' /></div><br/>Certification URL Config"]
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split In Batches", pos: "b", h: 48 }
n3@{ icon: "mdi:cog", form: "rounded", label: "Scrape Requirement Data", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Scrape Error?", pos: "b", h: 48 }
n5["<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/gitlab.svg' width='40' height='40' /></div><br/>Fetch Previous Data"]
n6["<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 Current & Previous"]
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/code.svg' width='40' height='40' /></div><br/>Detect Changes"]
n8@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Requirement Changed?", pos: "b", h: 48 }
n9@{ icon: "mdi:swap-vertical", form: "rounded", label: "Prepare GitLab File", pos: "b", h: 48 }
n10["<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/gitlab.svg' width='40' height='40' /></div><br/>Save Updated Requirement"]
n11@{ icon: "mdi:swap-vertical", form: "rounded", label: "Craft Alert Message", 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/gitlab.svg' width='40' height='40' /></div><br/>Log No-Change Issue"]
n13["<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/slack.svg' width='40' height='40' /></div><br/>Send a message"]
n0 --> n1
n4 --> n5
n4 --> n6
n7 --> n8
n2 --> n3
n11 --> n13
n5 --> n6
n9 --> n10
n8 --> n9
n8 --> n12
n3 --> n4
n1 --> n2
n6 --> n7
n10 --> n11
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 n0 trigger
class n4,n8 decision
class n1,n7 code
classDef customIcon fill:none,stroke:none
class n1,n5,n6,n7,n10,n12,n13 customIcon
Varför detta spelar roll: certifieringsregler ändras utan förvarning
De flesta certifieringsorgan uppdaterar krav som om de uppdaterade en sidfot. Några rader ändras. En PDF byts ut. En checklista för förnyelse får ett nytt formulär. Om du följer detta manuellt blir det en lågintensiv ångestuppgift som ligger i någons kalender … tills den inte gör det, och du missar den. Då blir det brandsläckning: gör om utbildningsplaner, uppdatera policyer, jaga dokumentation och förklara glappet för kunder eller revisorer. Det värsta är otydligheten. Du vet aldrig riktigt om ”inget ändrades” eller ”ingen kontrollerade”.
Det blir snabbt mycket. Här är var det vanligtvis faller isär.
- Du läser om samma sidor varje kvartal (eller värre, en gång per år) eftersom det inte finns någon pålitlig ”diff” att lita på.
- Uppdateringar delas i chatten utan någon permanent historik, så sex månader senare kan ingen bevisa vad som ändrades och när.
- Någon tar en skärmdump av en siduppdatering, men sammanhanget saknas, vilket ger långsammare beslut och mer fram och tillbaka.
- Även när en ändring fångas upp blir det rörigt att sätta ägarskap eftersom det inte är kopplat till ett riktigt ärende och arbetsflöde.
Vad du bygger: årlig scraping, diff och GitLab-revisionsspår
Det här arbetsflödet körs på ett schema (årligen som standard, men du kan ändra det) och kontrollerar en lista med URL:er till certifieringar eller branschorganisationer som du själv styr. För varje webbplats använder det ScrapeGraphAI för att extrahera de delar du bryr dig om, som kravtext, ikraftträdandedatum, förnyelseregler och avgifter. Sedan hämtar det föregående ”kända, bra” versionen från GitLab och jämför gammalt vs. nytt i ett diff-kontrollsteg. Om kraven har ändrats skapar eller uppdaterar det ett GitLab-ärende med detaljerna och uppdaterar den sparade kravfilen så att nästa körning har en korrekt formaterad baslinje. Till sist skickar det en avisering till din chattkanal (den här mallen använder en Slack-liknande nod för att ”skicka chattavisering”) så att ansvarigt team kan agera direkt.
Arbetsflödet startar med en schemalagd trigger och en URL-lista. ScrapeGraphAI hämtar den senaste informationen, difflogiken avgör om det är relevant, och GitLab blir din enda källa till sanning för både ärenden och ändringshistorik.
Det här bygger du
| Det som automatiseras | Det du uppnår |
|---|---|
|
|
Förväntade resultat
Säg att du följer 12 certifieringar på 12 separata webbplatser. En manuell kontroll tar vanligtvis 10 minuter per webbplats när du räknar in laddning, letande efter ”förnyelsekrav” och kopiering av anteckningar, så du lägger cirka 2 timmar per genomgång. Med det här arbetsflödet lägger du kanske 15 minuter en gång på att sätta upp URL-listan, och sedan är varje schemalagd körning hands-off. Om något ändras får du en chattavisering och ett GitLab-ärende med diffen, vilket gör om en halvdags ”har något ändrats?”-uppgift till en snabb uppföljning.
Innan du börjar
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
- ScrapeGraphAI för att extrahera kravtext från sidor.
- GitLab för att lagra baslinjer och skapa ärenden.
- ScrapeGraphAI API-nyckel (hämta den från instrumentpanelen i ditt ScrapeGraphAI-konto)
Svårighetsgrad: Nybörjare. Du kopplar in inloggningsuppgifter, redigerar en URL-lista och kör en testkörning.
Vill du att någon bygger detta åt dig? Prata med en automationsexpert (gratis 15-minuters konsultation).
Steg för steg
En schemalagd kontroll drar igång allt. Arbetsflödet startar med en årlig schematrigger, men du kan köra det kvartalsvis eller månadsvis om din bransch uppdateras oftare.
Din lista med certifierings-URL:er laddas och bearbetas i batchar. n8n läser in uppsättningen URL:er du vill övervaka och itererar sedan igenom dem med Split in Batches så att du inte överbelastar externa tjänster eller slår i rate limits.
ScrapeGraphAI extraherar kravetablerna. Varje sida skrapas till strukturerade fält. Ett felkontrollsteg routar misslyckanden så att du kan se vilken källa som inte returnerade data, istället för att en webbplats missas i det tysta.
GitLab blir minnet och åtgärdslagret. Arbetsflödet hämtar föregående baslinje, slår ihop den med aktuell scraping, räknar ut skillnader och skapar/uppdaterar sedan antingen ett ärende (när något ändrats) eller loggar ett resultat ”ingen förändring” för spårbarhet. En sista set-nod sätter ihop en kort avisering, och ett chattmeddelande skickas till din kanal med en länk till GitLab-objektet.
Du kan enkelt ändra schemat och URL-listan efter dina behov. Se den fullständiga implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera Scheduled Run Trigger
Det här arbetsflödet körs enligt ett schema för att regelbundet kontrollera certifieringskrav.
- Lägg till noden Scheduled Run Trigger som trigger.
- Ställ in schemaregeln så att den körs var 24:e timme genom att konfigurera Rule med Interval
hoursoch Hours Interval24. - Koppla Scheduled Run Trigger till Certification URL List.
Steg 2: Anslut listan med certifieringskällor
Definiera vilka certifierings-URL:er som ska övervakas och förbered batchbearbetning.
- Öppna Certification URL List och bekräfta att JavaScript-arrayen innehåller era certifieringar. Standardposterna inkluderar
pmpochcisspmed deras URL:er. - Uppdatera jsCode för att lägga till eller ta bort certifieringar vid behov. Varje objekt måste innehålla
certIdochurl. - Koppla Certification URL List till Batch Iterator.
- Behåll standardinställningarna i Batch Iterator för att bearbeta en certifiering per batchkörning.
Steg 3: Sätt upp scraping och feldetektering
Scrapa certifieringskrav och routa baserat på om scrapingen lyckas.
- Konfigurera Scrape Requirement Info med Website URL satt till
{{ $json.url }}. - Behåll User Prompt som:
Extract the certification name, full requirement description, last updated date, and renewal interval in years. Return JSON with keys: certName, requirementText, lastUpdated, renewalIntervalYears. - Inloggning krävs: Anslut era scrapegraphAi-inloggningsuppgifter i Scrape Requirement Info.
- Konfigurera Scrape Error Check så att den utvärderar om
{{ $json.error }}är lika medtrue. - Bekräfta att Scrape Requirement Info skickar utdata till Scrape Error Check.
Steg 4: Hämta tidigare poster och upptäck ändringar
Hämta den senast kända datan från GitLab och jämför den med den senaste scrapingen.
- I Retrieve Prior File, ställ in Operation till
getoch File Path till{{ '/certifications/' + $json.certId + '.json' }}. - Inloggning krävs: Anslut era GitLab-inloggningsuppgifter i Retrieve Prior File.
- Ställ in Combine Current With Prior till Mode
mergeByPosition. - Verifiera att Combine Current With Prior skickar utdata till Identify Differences.
- Granska jämförelselogiken i Identify Differences för att säkerställa att den flaggar
changedkorrekt baserat på skillnader i JSON. - Säkerställ att Identify Differences skickar utdata till Change Detected?.
Steg 5: Konfigurera uppdaterings- och notifieringsåtgärder
Uppdatera GitLab-filen när ändringar hittas och avisera Slack med detaljer.
- Konfigurera Change Detected? så att den kontrollerar om
{{ $json.changed }}är lika medtrue. - I grenen “true” använder ni Prepare GitLab Payload för att mappa
filePathochcommitMsgför uppdateringar (säkerställ att era satta fält matchar indata till Update Requirement File). - I Update Requirement File, ställ in Branch till
main, File Path till{{ $json.filePath }}och Commit Message till{{ $json.commitMsg }}. - Inloggning krävs: Anslut era GitLab-inloggningsuppgifter i Update Requirement File.
- Konfigurera Compose Alert Text för att bygga Slack-meddelandets innehåll från den uppdaterade datan.
- I Send Chat Alert väljer ni er Slack-kanal och mappar meddelandet från Compose Alert Text.
- Inloggning krävs: Anslut era Slack-inloggningsuppgifter i Send Chat Alert.
Steg 6: Logga utfall utan ändringar
Om ingen ändring upptäcks loggar arbetsflödet ett ärende i GitLab för spårning.
- Koppla grenen “false” från Change Detected? till Record No-Change Issue.
- Ställ in Title i Record No-Change Issue till
No change for {{$json.certId}} on {{$now.toFormat('yyyy-LL-dd')}}. - Inloggning krävs: Anslut era GitLab-inloggningsuppgifter i Record No-Change Issue.
Steg 7: Testa och aktivera ert arbetsflöde
Validera hela flödet från början till slut och aktivera automatiseringen.
- Klicka på Execute Workflow för att köra ett manuellt test från Scheduled Run Trigger.
- Bekräfta att Scrape Requirement Info returnerar giltig JSON och att Identify Differences sätter
changedkorrekt. - Verifiera att ändringar skapar en GitLab-commit via Update Requirement File och skickar ett Slack-meddelande via Send Chat Alert.
- Verifiera att körningar utan ändringar skapar ett GitLab-ärende via Record No-Change Issue.
- Slå på arbetsflödet Active för att aktivera schemalagd övervakning.
Felsökningstips
- GitLab-inloggningar kan löpa ut eller sakna rätt scope. Om skapande av ärenden misslyckas, kontrollera scope för din Personal Access Token (du behöver vanligtvis api) och bekräfta projekt-/repo-inställningarna i GitLab-noden.
- Om du använder Wait-noder eller extern rendering varierar bearbetningstiderna. Öka väntetiden om nedströmsnoder fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in er tonalitet tidigt, annars kommer du att redigera utdata för evigt.
Snabba svar
Cirka 20 minuter om du redan har konton och tokens redo.
Nej. Du klistrar in inloggningsuppgifter, uppdaterar URL-listan och justerar schemat. Difflogiken ingår redan i mallen.
Ja. n8n har ett gratis alternativ för egen hosting och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volym. Du behöver också räkna med avgifter för ScrapeGraphAI API-användning.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen hosting på en VPS. För egen hosting är Hostinger VPS prisvärd och hanterar n8n bra. Egen hosting ger dig obegränsade körningar men kräver grundläggande serveradministration.
Ja – och det bör du. De flesta team börjar med att byta ut kodnoden ”Certification URL List” för att lägga till extra metadata (ägare, förnyelsemånad, risknivå), och justerar sedan set-noden ”Compose Alert Text” så att ägaren nämns i meddelandet. Om du hellre vill lagra baslinjer någon annanstans kan du ersätta GitLab-noderna ”Retrieve Prior File” och ”Update Requirement File” med motsvarigheter för GitHub eller Google Drive. Beslutspunkten är IF-noden ”Change Detected?”, så oavsett vad du ändrar uppströms: behåll den grenlogiken intakt.
Vanligtvis blockerar målsajten automatiserade förfrågningar eller så behöver domänen tillåtas i dina ScrapeGraphAI-inställningar. Kontrollera att URL:en är publikt nåbar från där n8n körs, regenerera sedan din ScrapeGraphAI API-nyckel och uppdatera inloggningen i n8n. Om bara vissa sajter fallerar, lägg till headers eller minska batchstorleken så att du inte ser ut som ett botnät. Kontrollera också att sidan inte mest består av PDF-länkar; du kan behöva skrapa det länkade dokumentet istället för landningssidan.
Dussintals URL:er per körning är vanligt, och om du kör egen hosting är du främst begränsad av din server och scraping-API:et. På n8n Cloud är den praktiska gränsen din månatliga körkvot, så en månadsvis körning över 50 URL:er brukar fungera bra, medan dagliga kontroller i den skalan snabbt kan dra iväg.
Ofta, ja – eftersom scraping + diff + förgrening är där enklare verktyg börjar kännas begränsande. n8n är bekvämt med ”loopa igenom en lista, hantera fel, jämföra versioner och routa utfall”, och du betalar inte extra för mer komplex logik. Du får också alternativet för egen hosting, vilket spelar roll om du vill göra många kontroller utan att oroa dig för task counts. Samtidigt: om din variant av spårning av complianceförändringar bara är ”pinga mig om en sida ändrades”, kan Zapier eller Make gå snabbare att sätta upp. Om du är osäker, prata med en automationsexpert och få en rak rekommendation.
När detta väl rullar slutar du gissa och börjar spåra. GitLab håller sanningen, och ditt team blir bara avbrutet när det finns något som faktiskt är värt att agera 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.