leko.
Product intelligence / 01
Age & app behavior · Production

Two age groups.
Different habits.

Younger users lean toward discovery. Older users are more likely to publish, engage, and sync training. A comparison of what people actually do in Leko.

22 Sep – 21 Oct 2026 · UTC18–30 vs 31+Unsampled queries

How to read this: percentages compare users within each age group, rather than each group’s share of all events. A person counts once per feature. These percentages overlap and do not add to 100%.

Buddy-match swiping
More common at 18–30

52.2%vs43.3%

1,823 younger and 1,347 older users swiped. Younger group leads by 8.9 percentage points.

Post engagement
More common at 31+

21.4%vs32.7%

749 younger and 1,017 older users liked, commented, or reposted. Older group leads by 11.2 points.

Saved workout activity
Mostly health imports

6.6%vs9.4%

231 younger and 292 older users have eligible saved activity. Native tracker saves show a different pattern below.

01 / Feature participation

Who does what?

Share of observed active users with at least one action. Current settings are labelled separately from actions during the month.

18–3031+
Actual feature participationUsers with the action / active users in the same age group

One consistent comparison. Every percentage uses the actual users measured in each age group. Account signup timing differs between the groups, so these findings describe the selected month and do not establish that age causes the behavior.

02 / Reach vs depth

Opening a feature is only the beginning.

The younger group reaches more tabs. The older group is often more intensive once it acts.

Feature navigation

Percent of active users opening each surface at least once.

PostHog · 22 Sep–21 Oct · 0–100% common scale. Bars: red = 18–30; charcoal = 31+. Workout navigation combines workout_tab and workout_pageview.

3.28 days

Mean active days, ages 18–30

4.32 days

Mean active days, ages 31+

Median is 2 days in both groups. Older users have a larger highly active tail; these are active days, not sessions.

Intensity among people doing the action

Median and mean actions per participating user, over the full month.

Action18–3031+
MedianMeanMedianMean

Database for posts, engagement and activities; PostHog for swipes. Means are sensitive to heavy users. “Activity” requires a saved tracking result, positive duration, an end time, and a non-deleted linked workout; exercise start is in the selected month.

Training volume is mostly imported. Health imports account for 3,005 of 3,167 younger-group records (94.9%) and 8,729 of 8,888 older-group records (98.2%). Native tracker saves reach 87 younger users (2.5%) vs 58 older users (1.9%). Higher saved totals at 31+ do not mean more native tracker use.

03 / Feed & location

More browsing breadth at 31+. More stored location at 18–30.

Distinct posts newly recorded as seen

Distribution of users by retained user/post seen records created during the month. Vertical axis: share of active users, 0–40%.

Horizontal axis: number of distinct post records. Each pair is 18–30 (red), then 31+ (charcoal). Source: Production postSeen joined to currently published posts.

19 posts

Median per active user, 18–30

32 posts

Median per active user, 31+

A breadth proxy, not exact scroll depth or total impressions. Repeat views do not create new user/post rows; seen-history resets, deletion, and current post visibility can change the retained record. The current mobile viewability threshold is 40% visible for 500 ms.

Location: intent, outcome and saved state

These are different signals. A tap is not a permission grant.

Granted location permission: at least one maps_permission_outcome = granted event during the month. Existing grants may generate no event, so other users are not necessarily denied. This does not measure today’s permission state.

Saved location + sharing allowed: current Saved location row with coordinates and current locationAudience other than noOne (missing privacy setting defaults to everyone). May be a manually selected location. It does not prove live GPS access or recommendation eligibility.

04 / Published content

Photos lead. The content mix still differs.

Composition of original posts, rather than share of users. Ages 18–30 published 1,819 posts; ages 31+ published 3,611, from the same active-user cohorts.

18–3031+

Format: what the post contains

Share of each age group’s original posts · 0–100% scale

Five exclusive categories sum to 100% before rounding. Video-containing includes mixed photo/video posts. “Photos without video” excludes those mixed posts. Generated workout result-card images are excluded from uploaded photos.

Subject: workout or other post?

Share of each age group’s original posts · 0–100% scale

Workout results, workout invitations and other posts are mutually exclusive. Subject is independent of format: a video workout appears once in each view. “Other posts” includes personal and group content without a workout link; no caption-topic or sentiment inference is made.

Workout-related content is a similar share: 13.9% of younger-group posts (252) and 12.2% of older-group posts (442). Older users publish more workout posts in absolute numbers, alongside a much larger overall post volume.
The clearest format difference is photos. Photo posts without video account for 57.0% of the older group’s output vs 47.7% of the younger group’s. Video is a slightly larger part of the younger mix: 38.9% vs 35.5%. Text-only content is uncommon in both groups: 4.9% vs 3.6%.

Who creates each type?

Distinct creators / all active users in that age group. This denominator includes non-publishers and matches the participation charts above.

Content created18–30 creators% of 3,493 active31+ creators% of 3,111 active

Interpretation: a younger group’s post mix can contain more video proportionally, while an older user is still more likely to publish a video. Video creators are 7.6% of younger active users and 12.4% of older active users. Creator rows overlap because one author can publish several content types.

Source: Metabase Production · Posts created 22 Sep–21 Oct 2026 · Fresh current-state extraction on 22 October. Original posts only; excludes reposts, deleted/rejected/muted/unapproved posts. Media combines post and linked activity attachments, deduplicates media IDs, excludes known generated cards, and counts ready/non-rejected retained videos. Broken attachment references remain unavailable rather than becoming text-only. Creator cohorts remain unchanged.

All indicators: actual counts and participation percentages

Participation = users with the action / active users in that age group. Current-state metrics are snapshots at extraction, not historical settings. Small actor counts should be treated cautiously.

Indicator / source18–30 users18–30 %31+ users31+ %Gap
18–30 minus 31+
Definitions, account coverage and reproducible queries

Scope. Production database 4; PostHog Production project 106150. UTC window: 2026-09-22 00:00 inclusive to 2026-10-22 00:00 exclusive. Birth-date age calculated on 2026-10-22. Non-deleted, non-admin accounts created before the window end; ages 18–30 and 31–120. User identity is event properties.user_id, falling back to person.properties.user_id, joined to users.id. User IDs, names and birth dates are not embedded in this report.

Account base. There are 4,961 eligible accounts aged 18–30 and 4,736 aged 31+ (9,697 adults); 70.4% and 65.7%, respectively, appear in the study’s active population. Primary behavioral comparisons use active users. The full export has no sampling, no estimated event multipliers and no uploads or writes to either production service.

Training sources. Native tracker saves require trackingAttemptId to be present; health-imported records require a nonblank sourceIdentifier. Every eligible activity in the full-source control belonged to exactly one of those sets. sourceType alone is insufficient: some native tracker records also carry healthkit as their source type. A user can have both kinds, so the native/import user percentages overlap. Tracker-start confirmations are a separate PostHog action; start and save metrics are not a matched conversion funnel.

Single percentage definition. All charts, tables and CSV exports use the actual measured actor count divided by the active-user count for that age group. No weighting or extrapolation is applied.

  • Swipes: sum explorer_swipe_left, explorer_swipe_left_button, explorer_swipe_right, explorer_swipe_right_button and explorer_swipe_top; a user counts once for participation. Source mapping treats gesture and button forms as alternative swipe sources. Includes undo/repeated actions as recorded; not unique people evaluated or successful matches.
  • Post engagement: at least one retained post like, comment or repost. These interactions may come from feed, profile, group or another entry point; the database does not reliably attribute every action to the feed surface.
  • Map exploration: maps_marker_click, maps_cluster_click, maps_preview_open or maps_entity_from_search_click. This is an interaction signal, not a completed booking or workout.
  • Workout activity: positive-duration ended trackingResults linked to a non-deleted workout, with startedAt in the month. Includes saved live recordings and imported exercise; excludes merely opening Workouts, planned workouts and unsaved tracker starts. Total duration is recorded, not medically or fraud-validated.
  • Chat: non-deleted, non-rejected human text/photo messages in non-deleted chats, excluding leko and notifications system chats. Chat page visits and sending messages remain separate.
  • Follows: public.user_connections type=follow. Legacy public.followers has zero rows and was not used.
  • Current flags: saved location and location privacy, and healthConnected reflect extraction-time database state. They cannot reconstruct a permission or setting as of a prior day.

Extraction checks. Retrieved all 7,638 PostHog aggregate rows (7,637 non-null app IDs plus one unattributed bucket), with unique IDs and 1,695,639 selected events in total. Retrieved all 11,373 eligible account rows with no duplicate IDs. Known-adult matched cohort: 6,604. API result pages were combined locally; no raw event payloads were exported.

Production SQL

Read-only source query. Paginate all account rows; aggregate locally after the app-user identity join. The corrected follows source is user_connections.


Post content classification SQL

Read-only post-level format and workout-subject classification, aggregated per author and joined locally to the same active-user cohorts. Paginate if the author count exceeds 2,000.


PostHog SQL

Read-only per-user aggregation. Repeat with offsets 0, 500, 1,000, … until the final page. The predicate excludes events explicitly flagged as emulator traffic; empty flags do not assert a physical device. The final null identity bucket is excluded from user comparisons.