Remove Bullet Points From Text — Free Online Bullet Stripper
Paste any text and strip every bullet point symbol, list marker, and leading dash in one click. Paragraphs, sentences, and spacing stay intact. Runs entirely in your browser.
Hidden character report
Paste text to scan
Why AI output is full of bullet points
Large language models default to structured list formatting because their training data rewards it. Technical documentation, how-to articles, and listicle blog posts — all heavily represented in pre-training corpora — use bullets to signal clarity and scannability. When you ask a model to summarize, explain, or outline almost anything, it mirrors that pattern. The result is a response that reads like a PowerPoint deck rather than coherent prose.
The model is not wrong to produce lists; lists are genuinely useful in many contexts. The problem arises when you need the content in a format that does not accept or render bullets: a body text field in a CMS, a paragraph in a word-processor document, a caption in a design tool, or the body of an email where a stream of dashes looks unprofessional. Cleaning the formatting after the fact is faster than negotiating with the model's output tendencies every time.
This tool removes the visual markers — the bullet characters, the leading dashes and asterisks, the numbered prefixes like <code>1.</code> or <code>1)</code> — and leaves the underlying words exactly as the model wrote them. You get the content without the list structure, ready to paste wherever plain prose is expected.
What counts as a bullet point
The most common marker is the Unicode bullet character U+2022 (•), which chat interfaces and word processors insert automatically when you create a list. Close relatives include the triangular bullet U+2023 (‣), the white bullet U+25E6 (◦), the black small square U+25AA (▪), and the em dash (—) used as a list opener in certain editorial styles. All of these appear at the start of a line followed by a space and the list item text.
Plain-text list markers are equally common, especially in AI output. A leading hyphen or minus sign followed by a space (<code>- item</code>) is the standard Markdown unordered list syntax. Asterisks (<code>* item</code>) and plus signs (<code>+ item</code>) are also valid Markdown unordered markers and appear regularly in model output. The tool handles all three.
Numbered lists use a digit or letter followed by a period or parenthesis: <code>1. item</code>, <code>2) item</code>, <code>a. item</code>, <code>A) item</code>. These are stripped along with their trailing separator and any leading whitespace so the remaining text starts at the first word of the list item. Nested bullets — items indented with two or four spaces before the marker — are also handled; the indentation and the nested marker are both removed.
How the stripping algorithm works
The tool processes text line by line. For each line it checks whether the trimmed content starts with a recognised list marker. If it does, the marker — and any whitespace between the marker and the first word — is removed. The rest of the line is kept verbatim. Lines that do not start with a list marker pass through unchanged, so your paragraph text, headings, and standalone sentences are unaffected.
After stripping markers, consecutive cleaned lines are joined together with a space so that a multi-item bulleted list becomes a single continuous paragraph. This is optional behaviour that you can toggle: if you want each former list item to remain on its own line — for example when you are pasting into a spreadsheet and each item should occupy one cell — you can disable the join step and get one sentence per row.
The algorithm does not attempt to preserve semantic structure beyond the text itself. It does not convert lists to sentences with conjunctions, add Oxford commas, or rewrite the items into flowing prose. If the AI wrote each bullet as a sentence fragment, the output will be sentence fragments joined by spaces. For full prose reconstruction, a second pass through the model with an instruction to convert the cleaned text into paragraph form gives better results.
Markdown versus rendered bullet points
Bullet points appear in two distinct forms depending on where you copy from. A chat interface like ChatGPT or Claude renders Markdown in the browser: you see a visual bullet list. When you copy from the rendered view, your clipboard typically receives the Unicode bullet character (•) rather than the raw Markdown hyphen. The raw Markdown — the hyphen-space syntax — only arrives in your clipboard if you copy from a code block, an API response, or an interface that displays raw text rather than rendering it.
Both forms are handled. The tool strips the Unicode bullet U+2022 from rendered output and strips the <code>-</code>, <code>*</code>, and <code>+</code> Markdown markers from raw output. You do not need to know which form your text is in; the tool detects and cleans both in the same pass.
Markdown also produces numbered lists using the <code>1.</code> syntax. When rendered, these display as visually formatted ordered lists, and copying from the rendered view may or may not preserve the numbers depending on the browser and the interface. The tool handles both the rendered digit-period form and the raw Markdown form, so the result is consistent regardless of which copy method you used.
Common use cases
Pasting AI summaries into a CMS body field. Content management systems often accept plain text or a limited HTML subset. A bullet list from a model becomes a wall of bullet characters or broken markup. Strip the markers first, then paste clean prose into the body field.
Converting model output into email body text. A bulleted list of action items looks structured in a notes app but reads as unstyled dashes in a plain-text email client. Remove the markers and reformat as numbered sentences if you need to preserve sequence.
Preparing text for slide presentations. PowerPoint and Google Slides have their own bullet formatting systems. Pasting text with pre-existing bullet markers from an AI tool often creates doubled formatting: the slide's own bullets plus the pasted markers. Clean the text before pasting and let the slide tool apply its own list style.
Importing AI-drafted content into spreadsheets. If each bullet represents a record — a product feature, a task, a data point — remove the markers and paste one item per row. The tool's per-line mode (join disabled) outputs each cleaned item as a separate line, which maps directly to one spreadsheet row per paste.
Normalising text before feeding it to another model. If your pipeline passes AI output to a second model for classification, translation, or further generation, bullet markers add noise. Clean structured lists to plain sentences before the second call to reduce token count and improve consistency.
What is preserved and what is removed
Removed: all Unicode bullet characters (•, ‣, ◦, ▪, ▸, ►, ➤, ➢ and their variants), leading hyphens and minus signs used as list markers, leading asterisks and plus signs used as Markdown list markers, leading numbered prefixes in the forms <code>1.</code> <code>1)</code> <code>a.</code> <code>A)</code>, and any whitespace between the marker and the first word of the item.
Preserved: the text content of every list item, all paragraphs that do not start with a recognised marker, blank lines between sections, inline formatting markers (bold asterisks inside a sentence, not at the start of a line), and all punctuation and special characters that appear within a line rather than at its start. Horizontal rules (three or more hyphens on their own line) are also preserved since they serve a structural purpose distinct from list markers.
Edge cases: a line that starts with a dash followed by a number — like <code>-12°C</code> or <code>-5%</code> — is not a list marker and is left unchanged. A line that starts with an asterisk inside a word — which should not happen at line start but can occur in malformed text — is treated conservatively and preserved. If the tool removes something you wanted to keep, use the undo button to restore the original and inspect the specific character at the start of that line. For reference on what Unicode characters are present in your text, the <a href="/invisible-character-remover" class="text-accent underline underline-offset-2">invisible character remover</a> provides a full per-character breakdown.
Bullet points versus other list formatting
This tool targets list markers specifically — the decorative or structural characters that prefix list items. It does not strip indentation from code blocks, collapse multiple spaces within a line, or remove Markdown headings (lines starting with <code>#</code>). Those are separate formatting layers that different tools address. For collapsing extra spaces throughout a document, the <a href="/remove-extra-spaces-from-text" class="text-accent underline underline-offset-2">remove extra spaces tool</a> handles that pass. For stripping all Markdown formatting including headings, bold, italic, and code fences — not just list markers — the <a href="/remove-markdown-from-text" class="text-accent underline underline-offset-2">remove Markdown tool</a> does the full job in one operation.
If your document has both bullet points and inline Markdown (bold terms, backtick code spans), running this tool first removes the list structure and leaves the inline markers. Running the Markdown tool first strips inline markers and leaves the list structure. The order does not produce different final results if you run both, but choosing the right single tool for your actual need is more efficient than running both every time.
Numbered lists are structurally different from bullet lists — they encode sequence — but this tool removes the numbering prefixes the same way it removes bullet characters. If you need to preserve the sequence information, copy the numbered items into a spreadsheet (one per row) before stripping, so the row numbers carry the sequence forward. Once you strip the <code>1.</code> prefix, the sequence information is gone from the text itself.
Characters this tool looks for
25 invisible characters and formatting controls, with the action taken on each one.
| Character | Code point | Action | What it does |
|---|---|---|---|
| Zero-width characters | |||
| Zero Width Space | U+200B | Removed | Invisible separator with no width. Commonly left behind when text is copied out of a chat window. |
| Zero Width Non-Joiner | U+200C | Removed | Invisible character that blocks two letters from joining in scripts such as Arabic or Devanagari. |
| Zero Width Joiner | U+200D | Removed | Invisible character used to glue emoji sequences together. Stray copies can break word wrapping. |
| Zero Width No-Break Space (BOM) | U+FEFF | Removed | Byte order mark. Harmless at the start of a file, invisible noise anywhere else. |
| Word Joiner | U+2060 | Removed | Tells a text engine not to break a line here. Invisible, and easy to carry along by accident. |
| Mongolian Vowel Separator | U+180E | Removed | A legacy invisible separator from Mongolian script that now renders as nothing at all. |
| Bidirectional controls | |||
| Left-to-Right Mark | U+200E | Removed | Directional hint for mixed-script lines. Invisible on screen but present in the character stream. |
| Right-to-Left Mark | U+200F | Removed | Mirror of the left-to-right mark, used to steer the order of mixed-direction text. |
| Arabic Letter Mark | U+061C | Removed | Invisible directional marker for Arabic text. Rarely intentional outside its original document. |
| Left-to-Right Embedding | U+202A | Removed | Opens an embedded left-to-right run. Unpaired copies can scramble the order of a sentence. |
| Right-to-Left Embedding | U+202B | Removed | Opens an embedded right-to-left run. Left behind after copy-paste, it can flip nearby punctuation. |
| Pop Directional Formatting | U+202C | Removed | Closes an embedded directional run. Without its partner it is pure invisible noise. |
| Left-to-Right Override | U+202D | Removed | Forces following characters to display left-to-right regardless of their own direction. |
| Right-to-Left Override | U+202E | Removed | Forces following characters to display right-to-left. A common cause of text that looks reversed. |
| Left-to-Right Isolate | U+2066 | Removed | Modern replacement for the embedding controls. Still invisible, still travels with copied text. |
| Right-to-Left Isolate | U+2067 | Removed | Isolates a right-to-left run from the surrounding paragraph direction. |
| First Strong Isolate | U+2068 | Removed | Isolates a run whose direction is decided by its first strong character. |
| Pop Directional Isolate | U+2069 | Removed | Closes an isolate opened by one of the isolate controls above. |
| Formatting controls | |||
| Soft Hyphen | U+00AD | Removed | A hyphen the reader only sees if the word happens to break at the end of a line. |
| Carriage Return (CR) | U+000D | Removed | Half of a Windows line ending. Kept on its own it produces doubled spacing in most editors. |
| Markdown Asterisk Marker | U+002A | Removed | Bold or italic marker such as ** left behind when text is copied in its raw form. Turn this group off to keep Markdown styling marks. |
| Markdown Backtick Marker | U+0060 | Removed | Inline-code backtick left behind after copying raw assistant output. Turn this group off to keep inline code marks. |
| Invisible spaces | |||
| No-Break Space | U+00A0 | → space | Looks exactly like a space but stops a line from breaking there. A frequent copy-paste leftover. |
| Figure Space | U+2007 | → space | A space as wide as a digit, used to align numbers in tables. Replaced with a normal space. |
| Narrow No-Break Space | U+202F | → space | A thin, non-breaking space from French typography. Replaced with a normal space. |
Frequently Asked Questions
▸Does this remove numbered list prefixes like '1.' and '2.' as well?
Yes. Numbered prefixes in the forms <code>1.</code>, <code>2)</code>, <code>a.</code>, and <code>A)</code> are all recognised and stripped. The number or letter and its separator — the period or parenthesis — are removed along with any space between the prefix and the first word of the item. If you need to preserve the sequence, note it separately before stripping, because the position information is lost once the prefix is removed.
▸Will it strip dashes from words that start with a hyphen, like negative numbers?
No. The tool distinguishes a list marker dash — a hyphen at the start of a line followed by a space and then text — from a leading minus sign attached to a number or word. A line starting with <code>-12°C</code> or <code>-50%</code> is left untouched. The list-marker pattern requires a space after the hyphen; a digit or letter immediately following the hyphen is not treated as a list marker.
▸What happens to nested bullet lists with indentation?
Nested items — lines that begin with spaces or tabs followed by a bullet marker — are handled. The leading whitespace and the nested marker are both stripped, leaving the item text starting at the first word. By default the tool joins all items into a single paragraph; if you enable per-line output mode, nested items appear as separate lines without any indentation, on the same level as their parent items.
▸Can I keep each list item on its own line instead of joining them into a paragraph?
Yes. Toggle the join mode off before pasting your text. In per-line mode, each list item — after its marker is stripped — remains as a separate line in the output. This is useful when you are preparing content for a spreadsheet, a database import, or any context where line breaks are meaningful delimiters.
▸Does the tool change anything other than the bullet markers?
No. Only the marker character and the whitespace immediately following it are removed. The words, punctuation, inline formatting, and spacing within each line are left exactly as they were. If you notice that something else changed, it is likely that the marker covered a character you did not see — for example a Unicode bullet followed by a zero-width space. The output character count compared to the input will tell you exactly how many characters were removed.
▸Why does my text still have dashes after I run it through the tool?
A dash in the middle or end of a line is not a list marker and is intentionally preserved. Em dashes (—) and en dashes (–) used as punctuation inside sentences are also left intact. Only a hyphen or dash at the very start of a line, followed by a space, matches the list-marker pattern. If your dashes persist, check whether they are at line start — you may need to scroll or widen your editor to see the full line.