
Start with a manual record of the public comments you need. Ask the authorized owner to check receipts through the records they already control. A public comment collector can help save source rows, but it cannot confirm payments. This guide explains how to keep both types of evidence clear without publishing private donor details.
1. Define the public posts and the record’s purpose
Write down which original public posts the record covers. Keep each original post URL, which is its web address. If you also review a shared post, save that address separately. Do not assume that a shared post carries the original comments.
The reader concern behind this guide is specific. A public comment dated September 10, 2024, says that rescue communities need comment history because it shows pledge history. That supports the need to preserve context. It does not prove demand for a particular spreadsheet design. The register below is a proposed manual method. See the public pledge-history comment, published September 10, 2024; checked October 25, 2026; one public account of the problem.
Before you collect anything, record:
- The purpose, such as preserving stated promises for later owner checks.
- The known original public post addresses.
- Any known shared-post addresses that need a separate check.
- The dates covered by your review.
- The person who can check owner-held receipt evidence.
- The people who can access the saved source records.
This method does not repair Facebook sharing or find every related post. It preserves the public evidence you can observe and keeps the owner’s receipt checks separate.
The aim also differs from using Facebook comments for customer feedback. That method groups topics. Here, you must preserve the exact promise and its link to checked evidence.
2. Save exact public comment records
For a small set of comments, save the records manually. Keep the exact words and the original source address. Copying an amount alone loses conditions that can change its meaning.
An ID is an identifier: a value used to refer to one record. Keep Facebook IDs exactly as supplied. A comment ID identifies a comment. It does not identify a payment or prove who controls a payment account.
Save these fields in a comment table:
| Field | What to save |
|---|---|
| `source_comment_id` | The exact comment ID, when available |
| `source_comment_url` | The direct comment address, when available |
| `source_post_id` | The ID of the content that owns the comment |
| `source_post_url` | The address of that exact content |
| `original_post_url` | The known original post address |
| `source_text` | The exact comment words |
| `published_at` | The public publication time, when available |
| `observed_at` | The time you saved or checked the record |
| `source_author_id` | The available public author ID |
| `thread_reference` | Available parent and root comment references |
| `source_note` | Missing context, shared-post context, or collection limits |
Keep the publication time and observation time separate. The observation time says when you saw the comment. It does not say when the author wrote it.
Keep an unmodified copy of each export. Limit access to the people who need it. Use fictional or redacted records in reports. Redacted records have private details removed. Do not publish donor contact details or owner-only receipt evidence.
Use the Actor when you need structured public rows
An Actor is an Apify program that performs a defined task. The Chronometrica Facebook Comments Scraper collects available public comments and replies from supplied content links. Its documented input accepts 1–100 public post, Reel, video, or photo links. Supported short and share links also work. Page, Group, profile, Story, and private links are outside that input contract.
The documented output includes comment IDs, available text, thread references, collection times, and available publication times. It also includes `contentId` and `postUrl` for the content that owns the comment. Optional values can be missing. See the Actor contract, checked October 25, 2026; default build 2.0.9; documented fields only, no run checked.
This small input shows the supported form:
{
"collectAllAvailable": false,
"commentSortMode": "all",
"includeReplies": true,
"maxResultsPerPost": 10,
"startUrls": [
"https://www.facebook.com/reel/1733966934399341"
]
}Replace the sample address in `startUrls` with your known public content address. The supplied example was checked for input form only. It was not run and is not evidence about that Reel’s comments.
In this input, `maxResultsPerPost` limits saved comments and replies to 10 per supplied URL. Replies count toward that limit and are separate paid rows. `commentSortMode` changes the requested order; `all` does not remove the limit. `collectAllAvailable` stays false.
The optional `commentsFrom` and `commentsUntil` fields filter by publication date. When you set a date filter, comments without a public date are skipped. Removing the result limit with `collectAllAvailable` can cost much more. Collection can still stop because the public source ends, a charge limit is reached, time runs out, or the source fails. These are documented controls, not results from a run for this guide.
Map `commentId` to `source_comment_id`, `contentId` to `source_post_id`, `text` to `source_text`, and `scrapedAt` to `observed_at`. Keep `publishedAt` separate. Use `parentCommentId`, `rootCommentId`, and `isReply` to retain thread context. If `commentUrl`, text, or a date is unavailable, keep it unavailable.
3. Build the promise register
Keep one checked promise identity per register entry. A promise identity is your reference for one stated promise. It is separate from the comment ID because several comments can repeat one promise.
Use these fields:
| Field | Rule |
|---|---|
| `pledge_reference` | Assign a stable internal promise reference |
| `source_comment_id` | Link to the saved source comment |
| `source_post_id` | Link to the content that owns the comment |
| `stated_amount` | Enter the amount supported by the exact words |
| `currency_if_stated` | Enter the currency only when stated |
| `condition` | Preserve any condition attached to the promise |
| `checked_status` | State what has been checked and what remains unresolved |
| `evidence_reference` | Point to the source or owner check that supports the status |
| `checked_at` | Record when someone made the check |
| `reviewer` | Record who made the check |
A blank amount is unknown, not zero. If a comment states an amount without a currency, keep the currency unknown. Do not assign a currency from the page’s location or another commenter’s words.
Keep conditions beside the amount. Do not turn a conditional promise into an unconditional one by removing its wording. If the condition’s outcome is unknown, record that uncertainty.
Use status words that describe the evidence. For example, distinguish a saved stated promise from a checked withdrawal or an unresolved change. A status must not turn a public statement into a confirmed receipt.
Several comments do not necessarily mean several promises or several people. Public author details do not prove donor identity. This also differs from turning Facebook feature requests into product priorities: neither repeated comments nor account counts establish how many payment promises were made.
4. Keep repeat comments and changed words as dated records
Preserve repeated observations without adding the same promise again.
If a later collection finds the same comment ID, keep the new observation time. If the visible words changed, keep both dated versions. A version is a saved state of a record at a stated time. Do not overwrite the earlier words.
Record a public edit time only when you have evidence for it. If you first notice changed words today, that establishes today’s observation. It does not establish when the author made the change.
A second comment can repeat an earlier promise. One author can also make more than one promise. Neither similar wording nor the same display name settles that question.
To link several comments to one promise:
- Keep every comment as a separate source row.
- Record the proposed link to a promise reference.
- Check an owner-held reference or other manual evidence that proves the relation.
- Save the check result, date, and reviewer.
- Merge the promise identities only when the relation is supported.
If the check is incomplete, leave the relation unresolved. Do not present the resulting amount as a settled total.
A missing comment in a later export does not establish a withdrawal. Keep the last saved record and describe the later observation accurately. Do not infer a payment, refund, or withdrawal from public silence.
5. Keep owner-supplied receipts in a separate table
The authorized owner checks receipts using records they already control. The Actor does not collect those receipts, read private groups, or verify transfers. It also does not hide, delete, approve, or publish comments. These limits are stated in the Actor contract, checked October 25, 2026; public collection scope, no payment verification.
Keep only the references needed for the review. A reference can point to evidence held by the authorized owner without copying private donor records into the public-comment file. Payment credentials and financial-account access have no place in this collection workflow.
Use a separate receipt table:
| Field | What to record |
|---|---|
| `receipt_reference` | A stable reference assigned to the receipt |
| `confirmed_amount` | The amount supported by the checked receipt |
| `receipt_currency` | The currency shown in that evidence |
| `receipt_date` | The receipt date supported by the owner’s record |
| `receipt_state` | The checked state of the receipt |
| `owner_evidence_reference` | A restricted reference to the owner-held evidence |
| `checked_at` | When the receipt evidence was checked |
| `reviewer` | Who checked it |
A partial transfer, withdrawal, or refund needs its own checked record. Preserve the earlier record and link the later change to it. Do not erase history to make the current summary look simple.
A confirmed receipt can remain unmatched to a promise. Likewise, a saved promise can have no confirmed receipt match. Keep both visible. An absent receipt match means the match is unconfirmed; it does not prove that the person failed to pay.
6. Match only with verified references
Reconciliation means checking how records relate while keeping differences visible. Here, you reconcile the promise register with the separate receipt table.
Create a matching log with these fields:
| Field | Purpose |
|---|---|
| `pledge_reference` | Identify the promise being checked |
| `receipt_reference` | Identify the candidate receipt |
| `matched_amount` | Record the amount supported by the checked relation |
| `match_status` | Distinguish a verified match from an unresolved one |
| `match_evidence_reference` | Identify the owner evidence that supports the relation |
| `checked_at` | Date the match check |
| `reviewer` | Identify the person who checked the relation |
Use verified identity and reference evidence available to the authorized owner. A display name alone is insufficient. An equal amount alone is insufficient. A public thank-you alone is also insufficient.
If evidence supports only part of the promised amount, record that part. Do not increase it to the full promise. If identity or references remain uncertain, keep the candidate match unresolved.
Keep different currencies separate. A combined number without a clear currency does not give the reader a usable amount.
7. Worked example: one repeated promise and one withdrawal
Original fiction. All promises, comments, receipt records, and owner checks below are invented. They are not actual donations or Actor results.
The volunteer saves these public records:
| Comment | Location | Promise reference | Stated amount | Checked relation |
|---|---|---|---|---|
| C1 | Original post | P1 | 100 USD | Source for P1 |
| C2 | Original post | P2 | 50 USD | Source for P2 |
| C3 | Shared post | P1 | 100 USD | Owner check confirms a repeat of P1 |
There are three comment records and two promise references. Preserve C3, but do not add another 100 USD. The owner check establishes that C3 repeats P1.
The owner then supplies two separate checked records:
| Owner record | Checked evidence | Linked promise | Amount |
|---|---|---|---|
| R1 | Confirmed receipt | P1 | 70 USD |
| W1 | Message withdrawing the promise | P2 | 50 USD |
W1 is a withdrawal record, not a receipt. R1 is a separate confirmed receipt matched to P1.
The arithmetic is:
- Original stated promises: 100 USD + 50 USD = 150 USD.
- Checked withdrawn promise: 50 USD.
- Remaining stated promise: 150 USD − 50 USD = 100 USD.
- Matched confirmed receipt: 70 USD.
- Unconfirmed remainder against P1: 100 USD − 70 USD = 30 USD.
Report all five figures with their labels. The original 150 USD preserves what was stated. The checked withdrawal explains the change. The confirmed 70 USD comes from R1, not from the public comments.
The 30 USD is an unconfirmed portion of P1’s stated promise. It is not money owed or cash available. The Actor did not verify a transfer. No receipt is supplied for P2 in this example; that absence must not be rewritten as a confirmed zero payment.
8. Check the record before you report it
Ask another reviewer to trace each promise to its source and each confirmed match to owner-held evidence. Give that reviewer the complete register, matching log, and relevant source versions.
Use these acceptance checks:
- Every promise has a source reference and exact saved words.
- Publication, observation, and check dates remain separate.
- Missing amounts and currencies remain unknown.
- Repeated comments do not create extra promises without evidence.
- Changed words remain available as dated versions.
- Each confirmed receipt has a separate owner evidence reference.
- Each match has evidence beyond a name or equal amount.
- Withdrawals, changes, and refunds retain their checked records.
- Unmatched records and unresolved amounts remain visible.
- Each total has a clear currency and evidence label.
Stop short of a settled total when an unresolved record could change it. Show the known amounts and explain the limit instead.
If a collection reached its saved-row cap, report that limit. If a date filter excluded undated comments, report that exclusion. If a source link no longer shows the needed context, keep the saved observation and mark the current check incomplete. None of these states supports an accusation against a donor.
Sources & further reading
- Public rescue pledge-history comment — published September 10, 2024; retrieved October 25, 2026; one public comment, no authenticated read or proof of demand for this method
- Chronometrica Facebook Comments Scraper contract and README — checked October 25, 2026; default build 2.0.9; static documented inputs and outputs, no paid run or runtime reliability test
- Export Facebook Comments to CSV Task — checked October 25, 2026; public page presence only, saved settings not authenticated and Task not run
By Chronometrica · Updated
Back to top ↑
