linkedin-formatter

Turn Markdown into ready-to-post LinkedIn content — with proper handling of German umlauts

Package Information

Released: 2 mo ago
Downloads: 0 weekly / 0 monthly
Latest Version: 1.0.3

Available Nodes

Documentation generating…

Documentation

@bierwirth-it/n8n-nodes-linkedin-formatter

npm version
CI
License: MIT

Turn Markdown into ready-to-post LinkedIn content — with proper handling of German umlauts.

Deutsche Fassung dieser Anleitung


The problem

LinkedIn has no text formatting. No bold, no italics, no headings, no lists, no anchor links. Every "bold" LinkedIn post you have seen uses Unicode look-alike characters — and that comes at a price:

  • LinkedIn search does not index them. A bold 𝗻𝟴𝗻 is invisible to anyone searching for n8n.
  • Screen readers mangle them. They spell out character names or skip them entirely.
  • German umlauts do not exist in these Unicode blocks. There is no bold ä, ö, ü or ß.

Every other formatter passes umlauts through unchanged, which breaks the typeface mid-word:

𝗤𝘂𝗮𝗹𝗶𝘁ä𝘁        ← what other tools produce

What this node does differently

Words containing an umlaut stay unformatted — entirely.

Input Output
**Qualität** deutlich **steigern** Qualität deutlich 𝘀𝘁𝗲𝗶𝗴𝗲𝗿𝗻
**Wichtig!** 𝗪𝗶𝗰𝗵𝘁𝗶𝗴!
**Größe** Größe

The typeface stays consistent and the word remains findable in LinkedIn search. Punctuation does not trigger the rule.

Beyond formatting, the node moves links out of the post body — links in the body cost roughly 60 % reach — and tells you what else is hurting your post.

Installation

In n8n, go to Settings → Community Nodes and enter:

@bierwirth-it/n8n-nodes-linkedin-formatter

Usage

The node has two parameters:

Parameter Purpose
Markdown The text to convert. Type it directly, or drag in a field / use an expression such as {{ $json.markdown }}.
Destination Key Where the result is written. Dot notation works, e.g. output.linkedin.

Input

# Why **Qualität** beats quantity

Repetitive tasks cost **time**. Automate them instead — and **größer**
does not mean better.

- Ten live sessions
- Über 30 hands-on exercises

Read more: [the course](https://bierwirth-it.de/n8n-schulung/basic/)

#automation #n8n

Output

Why Qualität 𝗯𝗲𝗮𝘁𝘀 𝗾𝘂𝗮𝗻𝘁𝗶𝘁𝘆

Repetitive tasks cost 𝘁𝗶𝗺𝗲. Automate them instead — and größer does not mean better.

• Ten live sessions
• Über 30 hands-on exercises

Read more: the course

#automation #n8n
{
  "text": "…",
  "firstComment": "https://bierwirth-it.de/n8n-schulung/basic/",
  "stats": {
    "chars": 268,
    "charsUtf16": 296,
    "hookChars": 31,
    "withinLimit": true,
    "inSweetSpot": false
  },
  "warnings": [
    "At 296 characters the post is short. Posts between 1301 and 2500 characters perform better."
  ]
}

Note what happened to the emphasis: Qualität and größer stayed plain because they carry umlauts, while beats, quantity and time turned bold. No broken typeface mid-word, and both German words remain findable in LinkedIn search.

firstComment holds the URLs removed from the body — post them as the first comment.

Options

Enabled by default

Option Effect
Bold **text** becomes 𝗯𝗼𝗹𝗱
Headings, bullet lists, numbered lists, paragraphs Markdown structure becomes clean LinkedIn text
Links to comment URLs move to a separate output field
Protect hashtags, protect code excluded from Unicode conversion
Stats, warnings reach diagnostics

Elements LinkedIn cannot render are removed by default: images, HTML, tables, horizontal rules, footnote markers. Blockquotes are the exception — their text is kept, since the content still carries meaning.

Available, disabled by default

Italic, strikethrough, emoji bullets, separators and generated hashtags are fully implemented and take effect the moment you switch them on. They are off by default because they cost readability, searchability or accessibility.

Ten Unicode typefaces are selectable for bold and italic: sans-serif, monospace, script, fraktur, double-struck, small caps, circled and squared.

Reach warnings

The node inspects the finished text and reports:

  • a blank line within the first 140 characters — it cuts the preview short
  • more than three hashtags
  • posts below 400 or above 3,000 characters
  • length outside the most effective range of 1,301–2,500 characters
  • phrasing that reads as engagement bait

Nothing is ever truncated — you get a warning, not a silent edit.

Character counting

Unicode look-alikes live above U+FFFF and occupy two UTF-16 units, so bold text doubles its computed length. Whether LinkedIn counts code points or UTF-16 units is not documented, so both numbers are reported and the limit check uses the less favourable one.

Limitations

Unicode formatting is not indexed by LinkedIn search and is read incorrectly, or not at all, by screen readers. Use it sparingly and never for your core message.

One Markdown detail worth knowing: unlike _, an asterisk creates emphasis inside a word as well. 3*4*5 therefore becomes 345. Escape the asterisks with \* to keep them.

Development

pnpm install
pnpm test      # test suite
pnpm lint      # n8n node linter
pnpm build     # compile and verify the build output

pnpm build checks that the compiled output is complete and loadable. Tests run against the source, so an incomplete dist would otherwise only surface at the user.

Design rationale — including the umlaut rule and the choice of parser — is documented in docs/design.md.

Contributing

Bug reports and suggestions are welcome via issues.

Author

André Bierwirth — Bierwirth-IT, Frankfurt am Main
IT consulting, process automation and AI transformation, including n8n training in German.

License

MIT — Copyright 2026 André Bierwirth, Bierwirth-IT

Discussion