SOURCE_ID: find_linkedin_post_reactors NAME: Find LinkedIn Post Reactors CATEGORY: Signals Build a list of the people who reacted to a company's recent public LinkedIn posts. Floqer reads the company's recent posts, collects the reactors, and imports them as people rows your workflows can enrich and act on. This is a one-time import — it captures reactors from the company's recent posts once. INDEX: 1. Endpoints 2. Collection model 3. Lifecycle (one-time only) 4. Body shape (preview + create) 5. Field catalogue 6. Dynamic options 7. How to configure end-to-end 8. Key notes 9. When to use ================================================================================ 1. ENDPOINTS ================================================================================ Source identifier (used in every endpoint path): `find_linkedin_post_reactors`. POST /api/v1/sources/find_linkedin_post_reactors/preview Scope: sources:read Returns a sample of reactors from the company's most recent post, without creating anything. Use this to confirm the company URL resolves and inspect the row shape. Does not consume Floqer credits. POST /api/v1/sources/find_linkedin_post_reactors Scope: sources:write Creates the source and starts a one-time collection across the company's recent posts. Returns `source_instance_id` (the new source's UUID). The collection consumes Floqer credits. GET /api/v1/sources//data Scope: sources:read Paginated reactor rows imported into the created source. `` is the UUID returned by Create. Query: `page_no` (default 1), `page_size` (default 20, max 200). Source-agnostic; see concepts.txt §10. POST /api/v1/sources//sync Scope: sources:write Connects the created source to a workflow and (by default) backfills it with the collected reactors. `` = UUID from Create. Body: { workflow_id, field_mapping, push_existing?, run? }. Source-agnostic; see concepts.txt §10. No connection is required. There is no dynamic-options endpoint for this source today (see §6). Because this is a one-time source, there is no ongoing-status PATCH to pause/resume. ================================================================================ 2. COLLECTION MODEL ================================================================================ Every preview/create call works from a single company. Core behaviour: - `company_linkedin_url` is required — the LinkedIn company page URL. It is normalised before use; a malformed or unresolvable URL is rejected. - Floqer reads the company's recent public posts and collects the people who reacted to them, de-duplicated by profile. - `max_recent_posts` (optional, default 5) caps how many of the company's most recent posts are scanned for reactors on create. More posts means more reactors and more credits. - `company_website` (optional) supplies the company's domain to improve matching/enrichment of the collected people. Preview scans only the single most recent post (a fast sample); create scans up to `max_recent_posts`. ================================================================================ 3. LIFECYCLE (ONE-TIME ONLY) ================================================================================ Find LinkedIn Post Reactors is a one-time (static) source. On create it collects reactors from the company's recent posts once and stores them — there is no schedule, no `expiration_date`, and no recurring re-check. To capture reactors from newer posts later, create a new source. ================================================================================ 4. BODY SHAPE (PREVIEW + CREATE) ================================================================================ Field names are snake_case. Unknown top-level keys are rejected with 400 — the body is strict. Preview accepts: company_linkedin_url required: non-empty string (LinkedIn company page URL) company_website optional: string (company domain or website) max_recent_posts optional: number (default 5) Create accepts: company_linkedin_url required: non-empty string company_website optional: string max_recent_posts optional: number (default 5) name required: display name for the new source Example preview body: { "company_linkedin_url": "https://www.linkedin.com/company/acme", "company_website": "acme.com" } Example create body: { "name": "Acme post reactors", "company_linkedin_url": "https://www.linkedin.com/company/acme", "company_website": "acme.com", "max_recent_posts": 10 } Preview response envelope: { "status": 200, "data": { "data": [ { ...reactor row... } ], "metadata": { "total_results": 184 } } } Rows are plain key/value objects (see §5). `total_results` is a best-effort estimate of total reactors across the company's recent posts. Create response envelope: { "status": 201, "data": { "source_instance_id": "", "name": "Acme post reactors", "created_at": "2026-05-27T12:00:00.000Z" } } The collection runs asynchronously — Create returns as soon as the source is created and the collection is started, not when reactors have finished arriving. ================================================================================ 5. FIELD CATALOGUE ================================================================================ company_linkedin_url (string) — required The LinkedIn company page URL whose recent posts to scan. Normalised before use; a URL that does not resolve to a company page is rejected. Example: "https://www.linkedin.com/company/acme" company_website (string) — optional The company's website or domain. Used to improve matching/enrichment of collected people. Example: "acme.com" max_recent_posts (number) — optional How many of the company's most recent posts to scan for reactors on create. Defaults to 5. Higher values collect more people and cost more credits. (Preview always scans only the single most recent post.) name (string) — required on create only Human-readable display name for the source. Imported row fields (read-only — returned by preview and stored on create): reaction_type The reaction (e.g. like, celebrate, support) name Reactor's full name headline Reactor's LinkedIn headline / job title profile_url Reactor's LinkedIn profile URL (unique per person) profile_picture Reactor's profile photo URL post_url URL of the post they reacted to post_text Text of the post they reacted to post_date Date the post was published post_likes Total reactions on that post post_comments Total comments on that post ================================================================================ 6. DYNAMIC OPTIONS ================================================================================ None. All fields are free-form strings / numbers. There is no `POST /api/v1/sources/find_linkedin_post_reactors/options/` endpoint. ================================================================================ 7. HOW TO CONFIGURE END-TO-END ================================================================================ Step 1 — Preview before committing POST /api/v1/sources/find_linkedin_post_reactors/preview Body: { "company_linkedin_url": "...", "company_website": "..." } Confirm reactors come back and inspect the row shape. Preview scans only the most recent post and does not consume credits. Step 2 — Create the source POST /api/v1/sources/find_linkedin_post_reactors Body: + `"name"` and optionally `"max_recent_posts"`. Response: { "status": 201, "data": { "source_instance_id": "", ... } } Step 2b — (Optional) Poll collected reactors after create GET /api/v1/sources//data?page_no=1&page_size=20 ( = UUID from Step 2) Step 3 — Sync the source into a workflow POST /api/v1/sources//sync ( = UUID from Step 2 ) Map workflow inputs to reactor row fields (common: `input.name`, `input.profile_url`, `input.headline`, `input.post_url`). See concepts.txt §10. This is a one-time collection — once it finishes there are no further runs. ================================================================================ 8. KEY NOTES ================================================================================ - No connection is required. - One-time import: no schedule, no `expiration_date`, no pause/resume. - Preview scans only the company's single most recent post and does not consume credits; create scans up to `max_recent_posts` and consumes credits scaling with that count. - `company_linkedin_url` must resolve to a valid company page or the request is rejected with 400. - Reactors are de-duplicated by profile URL across the scanned posts. - `company_website` is optional but improves person matching/enrichment. ================================================================================ 9. WHEN TO USE ================================================================================ - Warm outbound: target people who actively engaged with a company's content — your own or a competitor's. - Buying-signal lists: collect reactors on posts about a product launch or category and route them into an enrichment + outreach workflow. - Event / campaign follow-up: capture everyone who reacted to a campaign post for timely follow-up. When you instead want to monitor new posts matching a keyword over time, use `track_linkedin_posts`. ================================================================================ Last updated: 2026-06-02. Reference: https://floqer.com/docs/reference