Follower demographics
Who follows each LinkedIn Page: the follower breakdowns from the Followers section of Page analytics (seniority, job function, industry, country, location, company size, employees), in one long table.
- Grain
- organization_id x facet x segment_id
- Built from
- 8Raw tables
- 8Staging
- 1Core
- 1Analytics
- Reads from LinkedIn Company Pages
- follower_statistics_by_association_typefollower_statistics_by_functionfollower_statistics_by_geofollower_statistics_by_geo_countryfollower_statistics_by_industryfollower_statistics_by_seniorityfollower_statistics_by_staff_count_rangetotal_follower_count
- Ships as
- Weld and dbt SQL, open source on GitHub
1-- core.linkedin_pages.follower_demographics
2-- Who follows each LinkedIn Page: the follower breakdowns from the Followers
3-- section of Page analytics (seniority, job function, industry, country,
4-- location, company size, employees), in one long table.
5--
6-- Grain: organization_id x facet x segment_id. A snapshot as of the last sync.
7-- Depends on: staging.linkedin_pages.followers_by_*, .total_follower_count
8--
9-- LinkedIn returns at most the top 100 segments per facet and leaves members who
10-- did not fill in a field out of that facet, so a facet's segments rarely add up
11-- to the Page's follower total. share_of_facet divides by the facet's own sum;
12-- share_of_followers divides by the Page's total, so the gap shows what is not
13-- covered. The tables are replaced on every sync, so there is no history: to
14-- track demographics over time, snapshot this model on a schedule.
15
16WITH segments AS (
17 SELECT * FROM {{staging.linkedin_pages.followers_by_seniority}}
18 UNION ALL
19 SELECT * FROM {{staging.linkedin_pages.followers_by_function}}
20 UNION ALL
21 SELECT * FROM {{staging.linkedin_pages.followers_by_industry}}
22 UNION ALL
23 SELECT * FROM {{staging.linkedin_pages.followers_by_country}}
24 UNION ALL
25 SELECT * FROM {{staging.linkedin_pages.followers_by_location}}
26 UNION ALL
27 SELECT * FROM {{staging.linkedin_pages.followers_by_company_size}}
28 UNION ALL
29 SELECT * FROM {{staging.linkedin_pages.followers_by_association_type}}
30)
31
32SELECT
33 s.organization_id,
34 t.organization_name,
35 s.facet,
36 s.segment_id,
37 s.segment_name,
38 s.followers,
39 SAFE_DIVIDE(s.followers, SUM(s.followers) OVER (PARTITION BY s.organization_id, s.facet)) AS share_of_facet,
40 SAFE_DIVIDE(s.followers, t.follower_count) AS share_of_followers,This model and the 9 it depends on. Deploy them together; refs like {{staging.…}} resolve to the matching folders in Weld, and the dbt view uses source() and ref().
How it counts. And where it stops.
LinkedIn returns at most the top 100 segments per facet and leaves members who did not fill in a field out of that facet, so a facet's segments rarely add up to the Page's follower total. share_of_facet divides by the facet's own sum; share_of_followers divides by the Page's total, so the gap shows what is not covered. The tables are replaced on every sync, so there is no history: to track demographics over time, snapshot this model on a schedule.
Raw tables it reads
- raw.linkedin_pages.follower_statistics_by_association_type
- raw.linkedin_pages.follower_statistics_by_function
- raw.linkedin_pages.follower_statistics_by_geo
- raw.linkedin_pages.follower_statistics_by_geo_country
- raw.linkedin_pages.follower_statistics_by_industry
- raw.linkedin_pages.follower_statistics_by_seniority
- raw.linkedin_pages.follower_statistics_by_staff_count_range
- raw.linkedin_pages.total_follower_count
More LinkedIn Company Pages models
Put LinkedIn Company Pages in front
of your agents.
Connect LinkedIn Company Pages, deploy the models, and ask questions in Claude, Cursor or ChatGPT. Free for 14 days, no credit card.