Tidsrapportering misslyckas oftast på samma tråkiga sätt. Du börjar jobba, glömmer att trycka på ”start”, försöker återskapa dagen från kalender-smulor och sitter sedan på söndag kväll och städar upp en tidrapport som ändå känns fel.
Den här automatiseringen för Notion tidsrapportering drabbar först solooperatörer. Men konsulter med kundkontakt och teamledare på byråer känner av det också, särskilt när faktureringen hänger på strukturerade, trovärdiga loggar. Resultatet är enkelt: ett tryck på mobilen skapar korrekta poster med färre ändringar och färre ”vad gjorde jag klockan 14?”-ögonblick.
Du får se hur iOS-genvägen pratar med n8n, hur n8n uppdaterar din Notion-databas på ett säkert sätt och vad du ska justera för att det ska matcha hur du faktiskt jobbar.
Så här fungerar automatiseringen
Se hur detta löser problemet:
n8n Workflow Template: iOS-genvägar + Notion: tidsrapportering på autopilot
flowchart LR
subgraph sg0["Flow 1"]
direction LR
n0["<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/notion.dark.svg' width='40' height='40' /></div><br/>Create new page"]
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/notion.dark.svg' width='40' height='40' /></div><br/>Update page with end date"]
n2@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If pause_in_minuten is empty", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If page responded", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If page exist", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If page exist1", pos: "b", h: 48 }
n6@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If", pos: "b", h: 48 }
n7@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Break Duration", pos: "b", h: 48 }
n8["<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/notion.dark.svg' width='40' height='40' /></div><br/>Update break duration for cu.."]
n9["<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/notion.dark.svg' width='40' height='40' /></div><br/>Set break duration for curre.."]
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/notion.dark.svg' width='40' height='40' /></div><br/>Get notion page by date"]
n11@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Message - End time alrea..", pos: "b", h: 48 }
n12@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Message - End time tracked", pos: "b", h: 48 }
n13@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Message - Start time not..", pos: "b", h: 48 }
n14@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Message - Start not yet ..", pos: "b", h: 48 }
n15@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Message - Break time tra..", pos: "b", h: 48 }
n16@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Message - Break time upd..", pos: "b", h: 48 }
n17@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Message - Start time alr..", pos: "b", h: 48 }
n18@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Message - Start time alr..", pos: "b", h: 48 }
n19["<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/notion.dark.svg' width='40' height='40' /></div><br/>Get notion page with todays .."]
n20@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Switch", pos: "b", h: 48 }
n21["<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/notion.dark.svg' width='40' height='40' /></div><br/>Get notion page with todays .."]
n22["<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/webhook.dark.svg' width='40' height='40' /></div><br/>Respond to Webhook"]
n23["<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/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook - Track Time"]
n6 --> n1
n6 --> n11
n20 --> n19
n20 --> n7
n20 --> n21
n4 --> n17
n4 --> n0
n5 --> n6
n5 --> n13
n0 --> n18
n3 --> n2
n3 --> n14
n7 --> n10
n23 --> n20
n10 --> n3
n1 --> n12
n2 --> n9
n2 --> n8
n12 --> n22
n19 --> n4
n15 --> n22
n16 --> n22
n21 --> n5
n9 --> n15
n14 --> n22
n8 --> n16
n11 --> n22
n17 --> n22
n13 --> n22
n18 --> n22
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 n2,n3,n4,n5,n6,n20 decision
class n0,n1,n8,n9,n10,n19,n21 database
class n22,n23 api
classDef customIcon fill:none,stroke:none
class n0,n1,n8,n9,n10,n19,n21,n22,n23 customIcon
Utmaningen: pålitlig tidsrapportering när du har fullt upp
Manuell tidsrapportering faller sönder eftersom den konkurrerar med det riktiga jobbet. Du hoppar in i ett samtal, öppnar ett dokument, svarar på ett Slack-meddelande och plötsligt är det lunch utan att du har någon logg över när du började. Senare fakturerar du antingen för lite (smärtsamt) eller så gissar du (awkward). Och om du använder Notion som din ”single source of truth” så förstör röriga ändringar och halvt ifyllda egenskaper hela poängen med att ha en databas. Det handlar inte bara om förlorade minuter. Det är den konstanta mentala belastningen av att komma ihåg att komma ihåg.
Det blir mycket snabbt. Här är var det oftast brister i det dagliga arbetet.
- Start- och sluttider loggas för sent, så tidsstämplarna blir ”ungefär rätt” i stället för korrekta.
- Pausar glöms bort och fylls sedan i i klump, vilket får tidrapporten att se misstänkt ut.
- Du slutar med att redigera Notion-rader manuellt, och små skillnader i formatering byggs på under en månad.
- När du missar ”start” blir allt efterföljande en nödlösning, inklusive dagens slutnotering.
Lösningen: loggning med ett tryck från iOS-genvägar till Notion
Det här flödet kopplar en iOS-genväg (en knapp du kan fästa på hemskärmen) till en n8n-webhook och skriver strukturerade poster i en Notion-databas för tidsrapportering. Du trycker på ”Track Start”, ”Track Break” eller ”Track End” på mobilen, och genvägen skickar en enkel begäran till n8n. Därifrån kontrollerar n8n din Notion-databas för dagens post, avgör vad som ska hända härnäst och uppdaterar bara de fält som är rimliga. Om du redan har startat dagen skapar den inga dubbletter. Om du försöker logga en sluttid utan start får du ett tydligt meddelande i stället för att den i tysthet skriver felaktiga data.
Flödet börjar med att webhooken tar emot genvägens begäran och routar den baserat på vad du tryckte. Sedan hämtar (eller skapar) den rätt Notion-sida för i dag och skriver antingen en start-tidsstämpel, en pauslängd eller en slut-tidsstämpel. Till sist svarar den direkt så att iOS kan visa en notifiering om att det lyckades.
Vad som förändras: före vs. efter
| Det här tar bort | Effekten du märker |
|---|---|
|
|
Effekt i verkligheten
Säg att du spårar tid 5 dagar i veckan och oftast behöver tre åtgärder per dag: start, paus, slut. Manuellt betyder det att öppna Notion, hitta dagens rad och redigera fält, vilket kanske tar 2 minuter varje gång. Det är runt 30 minuter i veckan, plus ”städpasset” när du glömmer en dag (säg ytterligare en timme). Med det här flödet tar varje tryck cirka 5 sekunder och städpasset försvinner i stort sett, så du får tillbaka ungefär 1–2 timmar varje vecka utan att ändra hur du jobbar.
Krav
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
- Notion för tidsrapporteringsdatabasen och fälten.
- iOS-genvägar för att trigga start, paus och slut.
- Notion-integrations-token (hämta den i Notions inställningar för integrationer).
Kunskapsnivå: Nybörjare. Du kopplar Notion-uppgifter, klistrar in en webhook-URL i genvägen och testar några tryck.
Behöver du hjälp att implementera detta? Prata med en automationsexpert (gratis 15-minuters konsultation).
Flödets gång
Ett tryck på din iPhone triggar allt. iOS-genvägen visar en liten meny (Track Start, Track Break, Track End) och skickar ditt val till en n8n-webhook-URL.
n8n routar begäran till rätt spår. En switch-nod (”Route By Method”) delar upp start vs. paus vs. slut så att du inte har en stor logikklump att underhålla.
Notion kontrolleras innan något skrivs. För ”start” letar flödet upp dagens post och skapar antingen en ny sida eller returnerar ett meddelande om att du redan har startat. För ”paus” hittar det dagens post och avgör om det ska skriva en paus för första gången eller uppdatera en befintlig.
Du får en tydlig bekräftelse tillbaka i iOS. n8n skickar ett kort svar, som blir notifieringen du ser på mobilen (så du litar på att loggen faktiskt skapades).
Du kan enkelt ändra Notion-egenskaperna (till exempel formatet för ”Break length”) så att det matchar din befintliga databas. Se den fullständiga implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementation
Steg 1: konfigurera webhook-triggern
Konfigurera den inkommande webhooken som tar emot tidrapporteringshändelser och routar dem baserat på metod.
- Lägg till noden Incoming Time Webhook som din trigger.
- Ställ in Path på
track-time. - Ställ in HTTP Method på
POST. - Ställ in Response Mode på
responseNodeså att Return Webhook Reply kan skicka svaret.
Tips: Vid testning, skicka JSON med ett method-fält (start, break eller end) för att säkerställa att Route By Method routar korrekt.
Steg 2: anslut Notion
Dessa noder läser och skriver poster i er Notion-databas för tidrapportering.
- Öppna varje Notion-nod och bekräfta att databasen är vald: Retrieve Today Entry, Generate New Record, Find Record By Date, Write Break For Day, Modify Break For Day, Retrieve Today Entry End och Write End Timestamp.
- Credential Required: Anslut era notionApi-credentials på var och en av Notion-noderna som listas ovan.
- I alla Notion-söknoder, behåll datumfilteruttrycket:
{{$now.format('dd.MM.yyyy')}}.
⚠️ Vanlig fallgrop: Databasväljaren visar [YOUR_ID]. Ersätt det med er faktiska Notion-databas i varje Notion-nod, annars returnerar frågorna tomma resultat.
Steg 3: sätt upp logik för starttid
Den här vägen kontrollerar om dagens post finns och antingen skapar den eller svarar att den redan finns.
- I Route By Method, verifiera att Start-regeln jämför
{{$json.body.method}}medstart. - I Retrieve Today Entry, behåll Limit inställd på
1och Operation pågetAll. - I Check Entry Exists, säkerställ att villkoret kontrollerar att
{{$json}}inte är tom. - I Generate New Record, behåll Title inställd på
Tracked Time via n8noch ställ in Start-egenskapen på{{$now}}. - Bekräfta att Compose Start Tracked Msg sätter message till
Start time tracked.och att Compose Start Exists Msg sätter message tillStart time already tracked..
Steg 4: konfigurera logik för paustid
Den här grenen loggar eller uppdaterar paustid för aktuell dag och returnerar ett bekräftelsemeddelande.
- I Route By Method, verifiera att Break-regeln jämför
{{$json.body.method}}medbreak. - I Assign Break Length, ställ in break_duration på
{{$json.body.duration}}. - I Find Record By Date, behåll Limit inställd på
1och datumfilteruttrycket{{$now.format('dd.MM.yyyy')}}. - I Check Break Empty, bekräfta att villkoret kontrollerar att
{{$json.property_break}}är tom. - I Write Break For Day och Modify Break For Day, ställ in Break|number på
{{$('Assign Break Length').item.json.break_duration}}. - I Compose Break Logged Msg och Compose Break Updated Msg, behåll de dynamiska meddelandevärdena som använder
{{$('Assign Break Length').item.json.break_duration}}.
Tips: Om det inte finns någon post för idag skickar Validate Page Response Compose Start Missing Alt Msg så att webhooken returnerar ett tydligt felmeddelande.
Steg 5: konfigurera logik för sluttid och webhook-svar
Den här grenen registrerar sluttiden när den saknas och returnerar rätt svarsmeddelande.
- I Route By Method, verifiera att End-regeln jämför
{{$json.body.method}}medend. - I Retrieve Today Entry End, behåll datumfilteruttrycket
{{$now.format('dd.MM.yyyy')}}. - I Check End Missing, bekräfta att villkoret kontrollerar att
{{$json.property_end}}är tom. - I Write End Timestamp, ställ in End|date på
{{$now}}. - Bekräfta svarsmeddelanden: Compose End Logged Msg sätter message till
End Time Tracked!, och Compose End Exists Msg sätter message tillEnd time already tracked.. - I Return Webhook Reply, ställ in Respond With på
textoch Response Body på{{$json.message}}.
Steg 6: testa och aktivera ert workflow
Kör manuella tester för varje metod för att bekräfta routning, Notion-skrivningar och webhook-svar.
- Klicka på Execute Workflow och skicka en POST-request till URL:en för Incoming Time Webhook med en body som
{"method":"start"}. - Verifiera lyckad körning: ny Notion-post skapad av Generate New Record och svar från Return Webhook Reply som visar ”Start time tracked.”
- Testa pausloggning med
{"method":"break","duration":15}och bekräfta att Write Break For Day eller Modify Break For Day uppdaterar Break-egenskapen. - Testa slutloggning med
{"method":"end"}och bekräfta att Write End Timestamp fyller i End-datumet. - När allt är verifierat, slå på workflowet till Active för att använda det i produktion.
Se upp med
- Notion-uppgifter kan löpa ut eller kräva specifika behörigheter. Om saker slutar fungera, kontrollera först Notion-integrationens åtkomst till databasen (och att databasen delades med integrationen).
- Om du använder iOS-genvägar med en webhook-URL så spelar minsta klistra-in-fel roll. Dubbelkolla första ”Text”-steget i genvägen om du inte ser några webhook-träffar i n8n.
- Webhook-autentisering är ärligt talat värt det. Om du aktiverar Header auth i n8n, se till att genvägen skickar samma header också, annars får du fel som ser ut som slumpmässiga anslutningsproblem.
Vanliga frågor
Cirka 30 minuter om din Notion-databas är redo.
Ja. Ingen kodning krävs, men du behöver klistra in webhook-URL:en i iOS-genvägen och koppla Notion-uppgifter i n8n.
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 in Notion-åtkomst (oftast redan inkluderad i din workspace).
Två alternativ: n8n Cloud (hanterat, enklast uppsättning) 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 serverhantering.
Du kan skräddarsy den utan att ändra den övergripande logiken. De flesta ändringar sker i Notion-noderna (databasvalet och property-mappningen) och i noderna ”Assign Break Length” / ”Edit Fields (Set)” som formar det som skrivs. Vanliga justeringar är att spåra flera pauser, lägga till ett select-fält för ”Client” eller skriva till en veckovis rollup-databas i stället för en daglig. Om du vill ha andra regler (som att förhindra uppdateringar av pauser) kan du justera villkoret ”Check Break Empty”.
Oftast har Notion-integrationen aldrig delats med databasen du kopierade, eller så har token roterats. Koppla om Notion i n8n, öppna sedan Notion-databasen och bekräfta att integrationen har åtkomst. Dubbelkolla också att du valde den kopierade databasen i varje Notion-nod, inte originalmallen. Om det bara faller ibland kan Notions rate limits dyka upp när du kör många tester snabbt.
För personligt bruk eller små team är den i praktiken obegränsad.
Ofta, ja, eftersom det här flödet tjänar på villkorslogik (kontrollera om i dag finns, avgöra om pausen ska skrivas eller uppdateras och blockera ”slut” utan ”start”). n8n hanterar den typen av förgreningar snyggt, och egen hosting gör att du inte betalar per litet steg när volymen växer. Zapier eller Make kan fortfarande göra det, men du kan hamna med flera scenarier, mer duplicering och högre kostnad per körning. Den andra fördelen är webhook + iOS-genväg-mönstret, som förblir enkelt när du lägger till regler. Prata med en automationsexpert om du vill ha hjälp att välja.
När det väl är uppsatt sköter flödet tyst sitt jobb i bakgrunden. Din tidrapport håller sig strukturerad, och du slutar lägga energi på att komma ihåg små adminsteg.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.