{"slug": "getting-review-comments-out-of-overleaf-and-into-the-pdf", "title": "Getting review comments out of Overleaf, and into the PDF", "summary": "Overleaf's comment export tool, overleaf-comments-export, now lets researchers extract review comments from Overleaf papers into Markdown and JSON, with a Python tool that also generates a PDF highlighting comments. The tool, available as a browser extension or a Python app, handles papers with dozens of comments from multiple co-authors, providing stable IDs and per-reviewer reports. The project is open-source on GitHub under the Mangluu repository.", "body_md": "Get the review comments out of an Overleaf paper, into Markdown and JSON you can read, keep, commit, and hand to an AI assistant.\n\nOverleaf leaves comments out of both the source download and the Git sync, so the only way to work through them is inside the editor, one at a time. On a paper with ninety comments from three co-authors that stops being workable.\n\nIt also writes **a PDF of your paper with the comments highlighted on the words\nthey were written about**, coloured by who wrote them. No LaTeX to install and\nnothing to compile. See [Comments inside the PDF](#comments-inside-the-pdf).\n\nThere are two ways to run it. A **browser extension** that works on the project\ntab you already have open and never touches your session cookie, and a **Python\ntool with a window** that does everything, including the PDF. There is a\n[table below](#which-one-to-use) saying which does what.\n\n```\n## Summary\n\n- **Threads:** 2 (2 open, 0 resolved)\n- **Tracked changes:** 0\n- **Most active reviewers:** A. Reviewer (2), Co Author (1)\n\n### § Method\n\n**Line 142** — 2 comments\n\n> …We propose **▸a novel framework◂** for measuring perceived quality across conditions.\n\n**C014** _open · 1 reply_ — \"a novel framework\"\n- **A. Reviewer** · 2026-02-25 06:13 UTC: Needs a citation. Which studies show this?\n  - ↳ **Co Author** · 2026-02-26 10:00 UTC: Agree, Smith 2023 would work here.\n\n**C015** _open_ — \"coherent\"\n- **A. Reviewer** · 2026-02-27 13:46 UTC: This word is doing a lot of work. Define it.\n```\n\nEvery comment sits in its section, next to the words it was attached to, with its replies underneath and a stable id you can point at.\n\n**If you do not write code**, download the app for your computer from the\n[latest release](https://github.com/Mangluu/overleaf-comments-export/releases/latest),\nunzip it, and open it. There is nothing else to install, and no Python needed.\n\n| Your computer | Download |\n|---|---|\n| Mac | `OverleafCommentsExport-macOS.zip` |\n| Windows | `OverleafCommentsExport-Windows.zip` |\n| Linux | `OverleafCommentsExport-Linux.zip` , then `chmod +x \"Overleaf Comments Export\"` |\n\nThe first time you open it, macOS or Windows will warn you about an app it has not checked. That is because signing an app costs money every year, not because anything is wrong. On macOS, right-click the app and choose Open. On Windows, click More info, then Run anyway.\n\n**If you prefer a browser extension**, Chrome, Edge, and other Chromium\nbrowsers can run the exporter inside the Overleaf project you already have\nopen. It uses that tab's signed-in session without reading or storing the\nsession cookie, which makes it the easiest option on Windows, where Chrome\nencrypts its cookie store in a way the other options cannot read.\n\nLoad [ browser-extension/](/Mangluu/overleaf-comments-export/blob/main/browser-extension) as an unpacked extension. The\n\n[extension guide](/Mangluu/overleaf-comments-export/blob/main/browser-extension/README.md)has the installation steps and explains its deliberately limited permissions.\n\n| Extension | Python tool and app | |\n|---|---|---|\n| To install | Load a folder in your browser | pip, or download an app |\n| Session cookie | Never touched | Read from your browser, or pasted |\n| Markdown, JSON, JSONL, reply letter | Yes | Yes |\n`commented.pdf` , the paper with the comments highlighted |\nNo | Yes |\n| Comments written into your LaTeX | No | Yes |\n| One report per reviewer, reviewer filters, git-stable output | No | Yes |\n| Interface language | English and Chinese | English |\n\nUse the extension when you want the comments out with nothing to install. Use\nthe Python tool when you want the PDF, or any of the rest of it. Both write the\nsame Markdown and JSON, under the same `schema_version`\n\n, and a test in the suite\nfails if that ever stops being true.\n\n**If you use Python**, it is one command:\n\n```\npip install overleaf-comments-export\noverleaf-comments-export --gui\n```\n\nThat opens the same window. Paste your project link, choose a folder, press the button.\n\nThe window is not a reduced version of the tool. Everything below is in it, including the reply letter, the comments-in-the-PDF option, and the tidy output for version control. If you prefer the terminal:\n\n```\noverleaf-comments-export \\\n    --project-url https://www.overleaf.com/project/YOUR_PROJECT_ID \\\n    --out ./paper-comments\n```\n\nPython 3.10 or newer, tested up to 3.14, on macOS, Windows, and Linux.\n\n| File | What it is |\n|---|---|\n`comments-<date>.md` |\nThe readable export, or `comments.md` with `--stable` . Grouped by file, then section, then line. Stable ids `C001` , `T001` . |\n`comments.json` |\nThe same data, structured. Threads, anchors, tracked changes, source context. |\n`comments.jsonl` |\nOne self-contained record per comment, for pipelines. |\n`agents.md` |\nA short brief telling an AI assistant how to read the other two. |\n`response-letter.md` |\nOptional. A point-by-point reply document with a blank slot under every open comment. |\n`commented.pdf` |\nOptional. Your paper as Overleaf builds it, with the comments highlighted on the text. |\n`annotated/` |\nOptional. Your LaTeX with the comments embedded, if you would rather compile it yourself. |\n`by-reviewer/<name>.md` |\nOptional. One file per reviewer, so you can work through them one person at a time. |\n\nThis is what the export is shaped for. Hand an assistant the folder and it can work on any comment by id, because it already knows the quoted passage, the section it lives in, and what the replies said.\n\nSome things that work well.\n\n- Draft a reply to C014 that answers the reviewer and says what we changed.\n- Which comments are asking for the same thing? Group them.\n- Fill in the response letter for every comment from A. Reviewer.\n\nTracked changes come through too, as insertions and deletions with the\nsurrounding text, so a deletion reads as `before ~~removed~~ after`\n\n.\n\n```\n--pdf                      # a PDF of your paper with the comments in it\n--response-letter          # draft a point-by-point reply document\n--annotated-tex            # a copy of your source with the comments embedded\n--annotate-style todonotes # put those comments in the margin instead\n--per-reviewer             # one report per reviewer\n--reviewer \"Emma\"          # only threads this person touched\n--no-resolved              # only what is still open\n--no-open                  # only what is already resolved\n--no-changes               # skip tracked changes\n--render-mode detailed     # more source context around each comment\n--stable                   # output that only changes when the comments change\n--cookie \"PASTE\"           # sign in with a pasted cookie\n--base-url https://...     # a self-hosted Overleaf\n--no-jsonl                 # skip comments.jsonl\n--include-raw              # keep the untouched Overleaf data in comments.json\n--version                  # which version this is\n```\n\nRun `overleaf-comments-export --help`\n\nfor the full list.\n\nPress Stop in the window, or Ctrl-C on the command line. Nothing is written when you stop, so the folder is left as it was. A step already in progress has to finish first, so it can take a moment.\n\nThe window follows whether your computer is set to light or dark. There is an Appearance picker in the top right if you would rather fix it one way.\n\n```\npip install 'overleaf-comments-export[pdf]'\noverleaf-comments-export --project-url <link> --out ./review --pdf\n```\n\nThis writes `commented.pdf`\n\n: your paper exactly as Overleaf builds it, with\neach comment highlighted on the words it was written about, in the colour of\nwhoever wrote it. Hover a highlight and the comment appears. This is what\npeople have been asking Overleaf for since 2023.\n\nThere is nothing to install beyond that one line, and nothing to compile. The PDF Overleaf already built is fetched and the highlights are written into it, so it has your real document class, your real figures, and your real bibliography, and it cannot fail to build. Your project is never modified.\n\nIf Overleaf has no build to hand, the tool asks it to compile, so this works whether or not you have opened the project recently.\n\nUse a **browser**. Chrome, Edge, Firefox and Safari all show the highlights and\nthe comment on hover, and none of them need anything installed. Adobe Acrobat\nReader works too, and shows the comments in a side panel.\n\n**Preview on a Mac shows the highlights but not the comments.** Preview does\nnot display the note attached to a highlight, so hovering does nothing. This is\nPreview, not the file, and it affects any commented PDF, not just these. Drag\nthe file onto a browser window instead.\n\nWhatever you open it in, the last pages list every comment in full with the page it is on, so nothing depends on your reader supporting annotations.\n\nA PDF does not know where the LaTeX went, so the commented words are found by\nmatching the source against the text on the page. Citations and cross\nreferences are dropped, because they print as numbers. Maths is treated as\nunknowable and the words either side of it are used instead. Line-break hyphens\nare ignored, so a comment on `force-feedback`\n\nstill matches when it was set as\n`force-`\n\nand `feedback`\n\non two lines. A phrase that appears more than once is\nresolved by reading in step with the source order.\n\nOn the paper this was built against, 82 of 83 comments landed on the right\nwords. The one that did not was written on a `\\abstract`\n\ncommand, which prints\nnothing. A comment that cannot be placed is listed rather than put somewhere\nplausible.\n\nPapers split across several `.tex`\n\nfiles are handled; every file that carries a\ncomment is matched against the same pages.\n\n`--annotated-tex`\n\nwrites a copy of your LaTeX into `annotated/`\n\nwith the same\nhighlighting, to compile on Overleaf or on your own machine.\n\n```\noverleaf-comments-export --project-url <link> --out ./review --annotated-tex\nWe propose \\pdfmarkupcomment[markup=Highlight,color=ocehlA,author={A. Reviewer}]%\n{a novel framework}{[C014] A. Reviewer: Needs a citation. | Reply: Smith 2023 would work}\nfor measuring quality.\n```\n\nA key at the top of the document says whose colour is whose. Where more than one comment covers the same words, that stretch gets its own colour and a single note listing all of them. Where the same person has commented twice on overlapping words, their own colour darkens rather than changing, so it does not read as somebody else. Resolved comments are struck through in grey.\n\nSome spans cannot be highlighted, because the package that draws the markup rebuilds the text and fails on maths, on LaTeX commands, and across paragraph breaks. Those become a pin at the nearest safe point instead. Every comment, highlighted or not, is listed on a page at the end, which is also what you get when the PDF is printed, since readers do not print annotations.\n\n`--annotate-style pdfcomment`\n\ngoes back to a pin at each spot, and\n`--annotate-style todonotes`\n\nputs notes in the margin.\n\nYour own source is never touched. The annotated copies keep their original\nnames and folder structure, so `\\input`\n\nstill resolves if you upload the folder.\n\nReviewer text is made safe before it goes anywhere near the file. A comment\ncontaining `50% of $x$`\n\n, a stray backslash, a Greek letter, or punctuation typed\non a Chinese keyboard cannot break the build, because everything written out is\nreduced to plain ASCII first. Overleaf compiles with pdflatex, which stops the\nwhole document on a single character it cannot encode.\n\n`--response-letter`\n\nwrites the document you actually have to hand in. Every\nopen comment, grouped by whoever raised it, with the passage it refers to,\nwhere it sits, the discussion so far, and blank lines for your answer.\n\n```\n### C102 — § Method > Measures (line 192)\n\n**Referring to:** \"drawing selected quotes to point at possible sources of mismatch\"\n\n**Comment:**\n> more than just mismatch i would say\n\n**Response:**\n_TODO_\n\n**Change made:**\n_TODO — what changed, and where._\n```\n\nThe ids match `comments.json`\n\n, so you can ask an assistant to draft any point by\nid and it already knows the quote and the location.\n\nBy default each run writes `comments-<date>.md`\n\n, so you end up with one file per\nrun. That is fine for a one-off export and useless for version control.\n\n`--stable`\n\nwrites a single `comments.md`\n\nwith no timestamps in it. Re-run it and\nthe file does not move unless the comments actually moved.\n\n```\noverleaf-comments-export --project-url <link> --out ./review --stable\ngit add review/comments.md\ngit commit -m \"reviewer comments as of today\"\n```\n\nNext time you pull the comments, `git diff`\n\nshows the new ones and nothing else.\n\n```\n thread_count: 41\n+thread_count: 42\n\n+**C042** _open_ — \"the axis labels\"\n+- **A. Reviewer** · 2026-08-14 09:12 UTC: units are missing here\n```\n\nIf your university runs its own Overleaf rather than using overleaf.com, tick\n\"My university runs its own Overleaf\" in the window and put in its address, or\npass `--base-url https://overleaf.my-university.edu`\n\non the command line.\n\nComments work. Tracked changes do not, because Overleaf makes them part of Server Pro rather than the free Community Edition, so there are none to export.\n\nA self-hosted Overleaf keeps your session in a cookie named after itself, so an\ninstance called ifftex uses `ifftex.sid`\n\nrather than `overleaf_session2`\n\n.\nAnything ending in `.sid`\n\nis found without being told, so this normally needs no\nsetting up. If your server names it something else entirely, the export lists\nthe cookies it did find and you can name the right one.\n\n```\noverleaf-comments-export --project-url <link> --out ./out \\\n  --base-url https://overleaf.my-university.edu --cookie-name my_session\n```\n\nThere is a box for it in the window too, under the self-hosted options.\n\nFilenames work on every sign-in route now. Where the file tree is unavailable, the project is fetched as a zip and each document is named by matching its contents, so comments still group per file.\n\nThis path is less tested than overleaf.com, so if something does not work,\nplease [say so](https://github.com/Mangluu/overleaf-comments-export/issues/new/choose).\n\nThe tool needs the session your browser already has. It reads that session and nothing else, and it only ever reads.\n\n| How | Notes |\n|---|---|\n| Safari or Firefox | Reads the cookie file directly. No password prompt. |\n| Paste it yourself | Works on every computer and browser. The window shows you how, step by step. |\n| Chrome, Edge, Brave | Works on macOS but asks for your Keychain password every run. Chrome 127 and newer on Windows cannot be read at all. Use the browser extension there, or paste the cookie. |\n| The browser extension | Nothing to sign in to. It uses the tab you already have open and never reads the cookie at all. |\n\nTo paste it, open Overleaf, press F12, go to Application or Storage, then\nCookies, then `https://www.overleaf.com`\n\n, and copy the value of\n`overleaf_session2`\n\n. Treat it like a password. It stops working when you sign\nout. Nothing is stored unless you tick the box that says so.\n\n```\noverleaf-comments-export --project-url <link> --out ./out --cookie \"PASTE_HERE\"\n```\n\n| What you see | What it means |\n|---|---|\n| Could not look up\n|\n\nAnything else, please [open an issue](https://github.com/Mangluu/overleaf-comments-export/issues/new/choose).\nNever paste your session cookie into an issue.\n\nSeveral people hit this same wall independently. Different approaches suit different people, so here are the others.\n\n[adakite/extract-overleaf-comments](https://github.com/adakite/extract-overleaf-comments)works from a saved copy of the page, and can put comments in the PDF margins.[salokr/overleaf-comment-exporter](https://github.com/salokr/overleaf-comment-exporter)is a browser extension, so there is nothing to install on the command line.[IcarusLemon/overleaf-comments-cli](https://github.com/IcarusLemon/overleaf-comments-cli)is another command line exporter, driving a real browser under the hood.\n\nAll of them exist because of\n[this three year old request](https://github.com/overleaf/overleaf/issues/1126).\nAn official export would make every one of us unnecessary, which would be the\nbetter outcome.\n\nThis is an unofficial tool. It uses Overleaf's internal endpoints, which are undocumented and can change with any release. It identifies itself honestly in every request, backs off when asked to, and cannot modify your project. Even so, it may stop working one day without warning. If that happens, please say so in an issue, because you may be the first to notice.\n\nIt is not affiliated with or endorsed by Overleaf. Use it on projects you have\naccess to, in line with\n[Overleaf's terms](https://www.overleaf.com/legal).\n\nFeedback shapes what gets built next.\n\n- Something broke, or the output was wrong.\n[Open an issue.](https://github.com/Mangluu/overleaf-comments-export/issues/new/choose)You do not need to be a programmer. Paste what the tool said and that is plenty. - Want it to do something it does not.\n[Suggest a feature.](https://github.com/Mangluu/overleaf-comments-export/issues/new/choose)Describe the task, not only the feature. The real task usually leads somewhere better. - A question, or something you built with it.\n[Discussions.](https://github.com/Mangluu/overleaf-comments-export/discussions) - Code. See\n[CONTRIBUTING.md](/Mangluu/overleaf-comments-export/blob/main/CONTRIBUTING.md). Two minutes to get the tests running, and there are items marked*help wanted*in[ROADMAP.md](/Mangluu/overleaf-comments-export/blob/main/ROADMAP.md).\n\nWhat is coming next is in [ROADMAP.md](/Mangluu/overleaf-comments-export/blob/main/ROADMAP.md). What already changed is in\n[CHANGELOG.md](/Mangluu/overleaf-comments-export/blob/main/CHANGELOG.md).\n\nMaintained by [Shivang Gupta](https://github.com/Mangluu), who wrote it to\nhandle the review comments on his own papers.\n\nMIT. See [LICENSE](/Mangluu/overleaf-comments-export/blob/main/LICENSE).", "url": "https://wpnews.pro/news/getting-review-comments-out-of-overleaf-and-into-the-pdf", "canonical_source": "https://github.com/Mangluu/overleaf-comments-export", "published_at": "2026-08-14 18:59:08+00:00", "updated_at": "2026-08-14 19:12:23.778491+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools"], "entities": ["Overleaf", "Mangluu", "overleaf-comments-export", "GitHub"], "alternates": {"html": "https://wpnews.pro/news/getting-review-comments-out-of-overleaf-and-into-the-pdf", "markdown": "https://wpnews.pro/news/getting-review-comments-out-of-overleaf-and-into-the-pdf.md", "text": "https://wpnews.pro/news/getting-review-comments-out-of-overleaf-and-into-the-pdf.txt", "jsonld": "https://wpnews.pro/news/getting-review-comments-out-of-overleaf-and-into-the-pdf.jsonld"}}