KOUKKU – Tietosuojakäytäntö (v1)
Voimassa: 2.6.2026 alkaen Versio:
1.3
Rekisterinpitäjä: Caphan Oy, aputoiminimi CodeHan Oy,
Finland (Y-tunnus: 3418290-7) Yhteyshenkilö: Captain
Koukku, captain@koukku.app
Versio 1.3 (2.6.2026): laajennettu maksuhistorian käsittely kattamaan uusiutuvat Plus- ja Pro-tilaukset — tilaustila ja kaupan tapahtuma-/tilaustunniste, palvelinpuolen kuittivahvistus sekä palvelimien väliset ilmoitukset (Apple App Store Server Notifications V2, Google Real-Time Developer Notifications) alikäsittelijöinä.
Versio 1.2 (24.5.2026): lisätty kohdat kulutettavista sovellussisäisistä ostoksista (kultakolikkopaketit) — ostokuittien palvelinpuolen vahvistus, Apple App Store Server API ja Google Play Developer API alikäsittelijöinä, sekä maksuhistorian käsittelytarkoitus (ostosten toimittaminen, päällekkäisten hyvitysten estäminen).
Tämä on KOUKKU-sovelluksen virallinen tietosuojakäytäntö. Englanninkielinen käännös löytyy alaotsikon English version alta. Mikäli käännösten välillä on ristiriita, suomenkielinen versio on määräävä.
1. Mitä KOUKKU on
KOUKKU on suomalainen mobiilisovellus, jolla harrastajat tallentavat saaliita, seuraavat kalastusreissujen reittiä ja osallistuvat kilpailuihin. Sovellus on suunniteltu offline-first -periaatteella: kaikki saaliit, reitit ja kuvat tallentuvat ensin paikallisesti puhelimellesi, ja synkronoituvat KOUKKU-pilveen vain kun olet itse niin valinnut.
KOUKKU on suomalaisen Caphan Oy:n omistama (aputoiminimi CodeHan Oy). Sovellus ja palvelu noudattavat suomalaista lainsäädäntöä, EU:n yleistä tietosuoja- asetusta (GDPR, 2016/679) ja Apple App Storen sekä Google Play Storen ohjelmistovaatimuksia.
2. Mitä tietoja keräämme
2.1 Pakollinen tilitieto
- Toimiva sähköpostiosoite (Magic Link -kirjautumiseen).
- Valitsemasi Käyttäjänimi, Tiivistetty näyttönimi (vapaaehtoinen) ja iskulause (vapaaehtoinen).
- Käyttäjän henkilöllisyyttä ei tarvitse jakaa eikä sitä tarkisteta.
2.2 Sijaintitiedot
- Kun käytät sovellusta aktiivisesti: tarkka GPS-sijaintisi karttaa, saaliin paikan tallennusta ja kalastuspaikkojen tunnistusta varten.
- Kalastussession aikana, myös näytön ollessa lukossa: tarkka GPS reittilokia (TrailPoint), kalastuspaikkojen havaitsemista (FishingSpot) ja session yhteenvetojen (matka, alueet, viipyminen) laskentaa varten. Tallennus käynnistyy ja pysähtyy yksin sen mukaan, oletko itse aktivoinut sovelluksen Aktiivinen kalastussessio -kytkimen päälle.
- Kun sessio ei ole päällä, sijaintietoa ei lueta, kerätä eikä käytetä.
2.3 Saalistiedot
- Kalalaji, paino, pituus, vapautettu/pidetty, valokuva
(vapaaehtoinen),
vapaamuotoinen lisätieto, vieheen tyyppi, sääolosuhteet, GPS-sijainti.
2.4 Kilpailutiedot
- Osallistumisesi kilpailuihin, kilpailusi sisällä tehdyt saaliit, joukkueesi jäsenten kanssa jaetut tiedot.
2.5 Tekniset tiedot
- Laitteesi malli ja käyttöjärjestelmäversio.
- Sovelluksen versio ja viimeisimmät kaatumisraportit (Sentry).
- Anonymisoidut käyttäjäaktiviteettilokit (mistä alueista käyttäjäkunta kalastaa) — ilman henkilötunnistetta.
2.6 Maksuhistoria (sovellussisäiset ostokset)
KOUKKU myy kulutettavia kultakolikkopaketteja (10 / 50 / 150 kolikkoa) sovelluksen sisällä. Kun ostat paketin, maksun käsittelee Apple App Store tai Google Play. Heidän järjestelmänsä toimittaa KOUKKUlle allekirjoitetun ostokuitin, josta luetaan ja tallennetaan:
- Tuotetunniste (esim.
koukku_coins_50). - Tapahtumatunniste (Apple
transactionId/ GooglepurchaseToken) ainutlaatuisena avaimena, jolla estetään saman oston päällekkäinen hyvittäminen (idempotenssi). - Kuitin alkuperä (Apple Sandbox / Production tai Google
purchaseType-kenttä), jotta TestFlight- ja sandbox-ostot voidaan tunnistaa eikä niistä kirjata tuotantokolikoita.
Lisäksi KOUKKU tarjoaa uusiutuvat Plus- ja
Pro-tilaukset (tuotteet koukku_plus_monthly,
koukku_plus_annual, koukku_pro_monthly,
koukku_pro_annual). Tilauksista KOUKKU lukee ja tallentaa
ainoastaan:
- Tuotetunnisteen ja tilaustason (Plus / Pro) sekä jakson (kuukausi / vuosi).
- Tilauksen tilan (esim. kokeilu, aktiivinen, peruttu, vanhentunut) ja kuluvan jakson päättymisajan käyttöoikeuksien määrittämiseksi.
- Kaupan tapahtuma- tai tilaustunnisteen (Apple
originalTransactionId/ GooglepurchaseToken) ainutlaatuisena avaimena.
Tilauksen tila pidetään ajantasaisena Applen ja Googlen lähettämillä palvelimien välisillä ilmoituksilla (ks. §6.2). KOUKKU ei näe korttitietojasi, pankkitiliäsi, laskutusosoitettasi eikä muita maksupäätelaitteen tietoja — Apple ja Google käsittelevät kaiken maksuliikenteen omissa järjestelmissään ja toimittavat KOUKKUlle vain ostotapahtuman vahvistuksen ja tilauksen tilan.
3. Mihin tietoja käytetään
| Tarkoitus | Pakollinen / vapaaehtoinen | Oikeusperuste |
|---|---|---|
| Saaliiden tallennus ja näyttö | Pakollinen | Sopimuksen täyttäminen |
| Sijainnin näyttö kartalla | Pakollinen, kun käytät sovellusta | Suostumus (käytön aikana) |
| Reitin ja paikkojen tallennus session aikana | Vapaaehtoinen | Suostumus (“Salli aina”) |
| Kilpailuiden hallinta ja sijoitukset | Pakollinen kilpailussa | Sopimuksen täyttäminen |
| Eheystarkastus (Nightwatch) | Pakollinen | Oikeutettu etu (huijausten ehkäisy) |
| Kaatumisraportit (Sentry) | Pakollinen | Oikeutettu etu (palvelun toimivuus) |
| Markkinointiviestit | Vapaaehtoinen | Suostumus |
| Tekoälypohjainen tekstin ja metatietojen käsittely (saalis, kilpailut, vinkit) | Vapaaehtoinen / ominaisuuden mukaan | Suostumus tai oikeutettu etu (käyttötapauksen mukaan); rikastuspyynnöt ilman PII:tä (ks. §4 ja §6.1) |
| Sovellussisäisten ostojen toimittaminen ja päällekkäisyyden esto | Pakollinen, jos ostat paketin | Sopimuksen täyttäminen (kulutettavien hyödykkeiden toimitus) |
| Tilauksen (Plus/Pro) tilan ylläpito ja käyttöoikeuksien määrittäminen | Pakollinen, jos tilaat | Sopimuksen täyttäminen (tilauspalvelun toimitus) |
4. Mihin tietoja EI käytetä
- KOUKKU ei myy tietoja kolmansille osapuolille.
- KOUKKU ei käytä tietoja mainosten kohdistamiseen.
- KOUKKU ei jaa tarkkaa sijaintihistoriaasi (TrailPoint-geometriaa) edes pilveen — vain anonymisoidut yhteenvedot (kokonaismatka, alueavaimet, viipymisaika alueittain) synkronoituvat KOUKKU-pilveen.
- KOUKKU ei lähetä saaliin tekstirikastuksen yhteydessä ulkoisille tekoälytoimittajille henkilötunnistettavia tietoja (PII). Rikastuksen lähtevä payload rakennetaan ja suodatetaan palvelinpuolella (Supabase Edge) niin, ettei siihen sisälly esimerkiksi käyttäjätunnusta, sähköpostia, nimeä tai tarkkaa sijaintia — vain tehtävän kannalta tarpeellinen, uudelleenidentifiointiin riittämätön kalastussisältö (esim. laji, mitat, vapaateksti sellaisena kuin se tarvitaan mallille ilman avaintunnisteita).
5. Säilytysajat
| Tieto | Säilytetään |
|---|---|
| Sähköpostiosoite & profiili | Tilin elinajan |
| Saaliit | Tilin elinajan, voit poistaa yksittäisesti milloin vain |
| Raaka GPS-reittiloki (TrailPoint) | Session loppuun asti, sitten poistetaan paikallisesti |
| Session yhteenvedot (km, alueavaimet) | Tilin elinajan |
| Kaatumisraportit (Sentry) | 90 päivää |
| Markkinointi-suostumukset | Kunnes peruutat |
| Maksuhistoria (IAP-tapahtumatunniste) | Tilin elinajan (kirjanpito ja päällekkäisyyden esto) |
| Tilauksen tila & tilaustunniste (Plus/Pro) | Tilin elinajan (käyttöoikeudet ja kirjanpito) |
6. Kenelle tietoja luovutetaan
Tietoja säilytetään ja prosessoidaan seuraavissa palveluissa:
- Supabase, Inc. (USA, EU-region) — tietokanta, tiedostotallennus, todennus. EU:n alueen palvelin Frankfurtissa.
- Mapbox, Inc. (USA) — karttapalvelin (vain pyynnöt karttalaattoihin, ei sisällä saaliita tai sijaintihistoriaa).
- Sentry, Inc. (USA) — kaatumisraportit ilman henkilötunnisteita.
- Apple Inc. / Google LLC — push-ilmoitusten välitys; lisäksi sovellussisäisten ostosten ostohistoria (ks. §6.2).
6.2 Sovellussisäisten ostosten vahvistus
Kun ostat kultakolikkopaketin sovelluksen sisältä, ostokuitti vahvistetaan palvelinpuolella seuraavilla rajapinnoilla:
- Apple App Store Server API (StoreKit 2 JWS
-allekirjoitettu kuitti) — iOS-ostot. Pyyntö lähetetään
api.storekit.itunes.apple.com-osoitteeseen (tai sandbox-vastineeseen TestFlight-ostoissa) ainutlaatuisella tapahtumatunnisteella. - Google Play Developer API
(
androidpublisher.googleapis.com) — Android-ostot. Pyyntö lähetetään palvelutunnuksella allekirjoitetusta JWT-tokenista saadulla OAuth-pääsyavaimella.
Vahvistuspyyntö ei sisällä maksutietojasi (kortit, pankkitilit, laskutusosoite). Apple ja Google säilyttävät nämä omissa järjestelmissään. KOUKKU tallentaa vahvistuksen jälkeen ainoastaan tuotetunnisteen, tapahtumatunnisteen idempotenssia varten ja kuitin alkuperätilan (tuotanto / sandbox).
Tilaukset (Plus / Pro). Tilauksen elinkaaren tilan (kokeilu → aktiivinen → uusiutuminen → peruutus / vanhentuminen / hyvitys) KOUKKU pitää ajantasaisena samojen rajapintojen lisäksi palvelimien välisillä ilmoituksilla:
- Apple App Store Server Notifications V2 — Apple lähettää allekirjoitettuja tilaustapahtumailmoituksia KOUKKUn palvelinpäätepisteeseen.
- Google Play Real-Time Developer Notifications (Pub/Sub) — Google lähettää tilausmuutosilmoituksia KOUKKUn palvelinpäätepisteeseen.
Näiden ilmoitusten perusteella KOUKKU päivittää tilauksesi tilan ja käyttöoikeudet. Ilmoitukset sisältävät tilaus- ja tapahtumatunnisteita ja tilatietoja — eivät maksuvälineen tietoja.
6.1 Tekoälypalvelut (usean toimittajan reititys)
KOUKKUn tekoälyominaisuudet (mm. saaliin tekstirikastus, kilpailuihin
liittyvä tekstin tuotanto, AI-vinkit) eivät ole sidottuja yhteen
ainoaan malliin tai toimittajaan sovelluskoodissa. Pyynnöt
lähetetään Supabase Edge Functions -kerroksen kautta,
jossa voidaan valita
kulloinkin sopiva palveluntarjoaja (saatavuus, laatu, kustannus).
Saaliin tekstirikastus: ulkoiselle mallille lähetettävästä pyynnöstä poistetaan henkilötunnistettavat tiedot (PII) ennen lähetystä; payload sisältää vain minimoidun, tehtävän kannalta välttämättömän sisällön (ks. §4). Muissa tekoälypoluissa (esim. kilpailuanalyysi, vinkit) sovelletaan vastaavaa minimointia ja pseudonymisointia kullekin ominaisuudelle; tarkempi tekninen rajaus dokumentoidaan kehitysprosessissa ja päivitetään tähän käytäntöön tarvittaessa.
Mahdolliset tekoälykäsittelijät, joille minimoitu, henkilöön uudelleenliittämätön kyselysisältö voidaan välittää:
| Toimittaja | Rooli |
|---|---|
| Google (Gemini / Google AI Studio tai Vertex AI) | Voidaan käyttää, kun reititin tai konfiguraatio valitsee Gemini-mallin. |
| OpenAI (USA) | Voidaan käyttää, kun reititin tai konfiguraatio valitsee OpenAI-mallin. |
| Anthropic (USA) | Voidaan käyttää, kun reititin tai konfiguraatio valitsee Anthropic-mallin. |
Käytännön reititys tallennetaan ja seurataan palvelun sisäisesti (mm. kustannus- ja laatuseuranta). Käyttäjälle ei tarvitse valita palveluntarjoajaa käsin; valinta on KOUKKUn tekninen ja taloudellinen päätös, joka noudattaa tietosuoja-asetuksia (mm. oikeusperuste ja tarpeellisuus kullekin käsittelylle).
Kaikki kolmannen osapuolen palvelut on valittu siten, että EU:n tietosuojavaatimukset täyttyvät (DPA-sopimukset, EU-vakiosopimuslausekkeet tarvittaessa, Schrems II -arvio 2024). Yhdysvalloissa sijaitsevien tekoälytoimittajien osalta henkilötietojen siirto perustuu asianmukaisiin takuunmekanismeihin (esim. vakiosopimuslausekkeet) ja tarpeellisuuteen.
Tekoälyn tuottama sisältö voi olla virheellistä tai harhaanjohtavaa eikä se ole ammattineuvontaa. Tekoälysisältöä koskevat rajoitukset ja käyttäjävastuut on kuvattu tarkemmin Käyttöehdoissa (jakso Tekoälyyn perustuva sisältö ja automaattiset ehdotukset).
7. Sinun oikeutesi (GDPR)
Sinulla on oikeus:
- Tarkastaa mitä tietoja sinusta on tallennettu.
- Korjata virheelliset tiedot.
- Poistaa tilisi ja kaikki siihen liittyvät tiedot.
- Siirtää tietosi toiseen palveluun (data export).
- Peruuttaa suostumus milloin vain (sijainti, markkinointi).
- Vastustaa käsittelyä, joka perustuu oikeutettuun etuun.
- Tehdä valitus Tietosuojavaltuutetun toimistolle (https://tietosuoja.fi).
Suoraviivaisin tapa: avaa Asetukset → Profiili → “Pyydä tietojen
vienti” tai “Poista tilini”, tai lähetä viesti
privacy@koukku.app. Vastaamme 30 päivän sisällä.
8. Lasten käyttö
KOUKKUa ei ole suunnattu alle 13-vuotiaille. Jos olet alle 16-vuotias, pyydä huoltajaltasi suostumus ennen tilin luomista (GDPR:n vähimmäisikä Suomessa).
9. Muutokset käytäntöön
Päivitämme tätä käytäntöä, jos sovelluksen toiminnallisuus muuttuu olennaisesti tai laki sitä vaatii. Olennaiset muutokset näkyvät sovelluksessa hyväksyntänäytöllä; muut muutokset ilmoitetaan vain tällä sivulla. Versionumero ja päivämäärä yllä kertovat aina viimeisimmän voimassa olevan version.
English version
Effective: 2 June 2026 Version:
1.3
Data controller: Caphan Oy, auxiliary company name
CodeHan Oy, Finland Contact: Captain Koukku,
captain@koukku.app
Version 1.3 (2 June 2026): extended Purchase History to cover auto-renewable Plus and Pro subscriptions — subscription status and the store transaction/order id, server-side receipt verification, and server-to-server notifications (Apple App Store Server Notifications V2, Google Real-Time Developer Notifications) as sub-processors.
Version 1.2 (24 May 2026): added coverage for consumable in-app purchases (gold-coin packs) — server-side receipt verification, Apple App Store Server API and Google Play Developer API as sub-processors, and the Purchase History data category (purpose: deliver paid coins and prevent duplicate redemption).
This is the official privacy policy for the KOUKKU mobile application. The Finnish version above is the authoritative text; this English translation is provided for accessibility. In case of conflict, the Finnish version prevails.
1. What KOUKKU is
KOUKKU is a Finnish mobile app for recreational anglers to log catches, record fishing-trip trails, and participate in competitions. The app is offline-first — all catches, trails, and photos are stored locally on your phone first, and only sync to the KOUKKU cloud when you opt in.
2. What we collect
Mandatory: working email, username. Location: precise GPS while you
use the app, and
during an active fishing session (also when the screen is locked, only
if
you opt in). Catch data, competition data, technical telemetry,
and
anonymised area-activity logs. App does not collect users true identity
and will not enforce it. User can freely choose hte username used in
this context.
Purchase history (in-app purchases): when you buy a
consumable gold-coin pack (10 / 50 / 150 coins) inside the app, Apple
App Store or Google Play processes the payment and delivers KOUKKU a
signed receipt. We read and store only: the product identifier
(e.g. koukku_coins_50), the unique transaction identifier
(Apple transactionId / Google purchaseToken)
used as an idempotency key to prevent double-credit, and the receipt’s
storefront environment (Apple Sandbox/Production or Google
purchaseType) so that TestFlight and sandbox transactions
are not credited as production coins. We do not see
your card number, bank account, billing address, or any other
payment-instrument data — Apple and Google handle all of that in their
own systems and only deliver KOUKKU a confirmation that the purchase
occurred.
KOUKKU also offers auto-renewable Plus and Pro
subscriptions (products koukku_plus_monthly,
koukku_plus_annual, koukku_pro_monthly,
koukku_pro_annual). For subscriptions we read and store
only: the product id and tier (Plus / Pro) and period (monthly /
annual); the subscription status (e.g. trialing,
active, canceled, expired) and current-period end date used to determine
your entitlements; and the store transaction/order id
(Apple originalTransactionId / Google
purchaseToken) as a unique key. The status is kept current
via Apple/Google server-to-server notifications (see §6.2). As with
coins, we never see your payment-instrument data.
3. What we use it for
Catch storage, map display, in-session trail recording (opt-in), competition management, integrity analysis (Nightwatch), crash reports, marketing (opt-in), and AI-assisted text/metadata processing where you use those features (provider may be Google, OpenAI, or Anthropic — see §6.1). Catch text enrichment requests are built without PII in the outbound payload (see §4 and §6.1).
4. What we do NOT do
- We do NOT sell data to third parties.
- We do NOT use data for advertising targeting.
- We do NOT sync raw GPS trail geometry to the cloud — only anonymised aggregates (distance, area keys, dwell time) are synced.
- We do not send personally identifiable information (PII) to external AI vendors as part of catch text enrichment. The outbound enrichment payload is constructed and filtered on the server (Supabase Edge) so it does not include, for example, user IDs, email, display name, or precise location — only the minimum fishing-related content needed for the model task, without stable identifiers that would allow re-linking to you.
5. Retention
Account data: lifetime of the account. Raw trail points: deleted at session end. Session aggregates: lifetime of account. Crash reports: 90 days.
6. Sub-processors
Supabase (EU region), Mapbox, Sentry, Apple/Google (push delivery and, for users who buy a coin pack, in-app purchase receipt verification — see §6.2).
6.2 In-app purchase verification
When you buy a coin pack, KOUKKU’s Edge Function verifies the receipt server-side via:
- Apple App Store Server API (StoreKit 2 JWS-signed
transaction) — iOS purchases. Requests sent to
api.storekit.itunes.apple.com(or its sandbox counterpart for TestFlight purchases) using the unique transaction identifier. - Google Play Developer API
(
androidpublisher.googleapis.com) — Android purchases. Requests authenticated with an OAuth access token derived from a service-account-signed JWT.
Verification requests do not include your payment data (cards, bank accounts, billing address). Apple and Google retain those in their own systems. After verification KOUKKU stores only the product ID, the transaction ID (for idempotency), and the receipt’s environment flag (production vs. sandbox).
Subscriptions (Plus / Pro). In addition to the APIs above, KOUKKU keeps a subscription’s lifecycle status (trial → active → renewal → cancel / expiry / refund) current via server-to-server notifications:
- Apple App Store Server Notifications V2 — Apple posts signed subscription events to a KOUKKU server endpoint.
- Google Play Real-Time Developer Notifications (Pub/Sub) — Google posts subscription change events to a KOUKKU server endpoint.
KOUKKU updates your subscription status and entitlements from these notifications. They contain subscription/transaction identifiers and status information — not payment-instrument data.
6.1 AI services (multi-provider routing)
KOUKKU’s AI features (including catch text enrichment, competition-related copy, AI hints) are not hard-coded to a single vendor in the application. Requests are sent through Supabase Edge Functions, which may select the appropriate model and provider for cost, quality, and availability.
Catch text enrichment: PII is removed from the outbound request before any external model is called; the payload is minimised per §4. Other AI paths (e.g. competition analysis, hints) apply the same minimisation and pseudonymisation principles per feature; technical scope is maintained in development docs and reflected here when it changes.
Processors to which minimised, non–re-identifiable query content may be sent:
| Vendor | Role |
|---|---|
| Google (Gemini / Google AI Studio or Vertex AI) | May be used when the router or configuration selects an Gemini model. |
| OpenAI (USA) | May be used when the router or configuration selects an OpenAI model. |
| Anthropic (USA) | May be used when the router or configuration selects an Anthropic model. |
Routing and outcomes are logged internally for cost and quality control. You do not choose the provider manually; selection is a technical and commercial decision by KOUKKU, subject to GDPR principles (lawful basis and necessity).
All sub-processors are chosen to meet EU data-protection requirements (DPAs, SCCs where needed, Schrems II assessment 2024). Transfers to US-based AI vendors rely on appropriate safeguards (e.g. standard contractual clauses) and necessity.
AI-generated content may be incorrect or misleading and is not professional advice. Further limitations and user responsibilities are set out in the Terms of Service (section AI-assisted content and automated suggestions).
7. Your rights (GDPR)
Access, rectification, erasure, portability, withdrawal of consent,
objection, complaint to the Finnish Data Protection Ombudsman
(tietosuoja.fi). Use Settings → Profile → “Export my data” or “Delete my
account”, or email privacy@koukku.app.
8. Children
Not directed at users under 13. Under 16 requires guardian consent (GDPR Finnish minimum age).
9. Changes
Material changes are surfaced in-app via a re-acceptance dialog; other changes appear only on this page.