HL7 Pulse is a Windows application for working with HL7 v2 messages: open a feed, find the messages that matter, see what a feed really contains, correct or de-identify messages, and send them on. This guide follows the order you are likely to need it in.
Getting Started
System requirements
| Requirement | Details |
|---|---|
| Operating system | Windows 10 or Windows 11, 64-bit |
| Memory | 4 GB minimum; 8 GB or more recommended for large files |
| Disk space | About 260 MB for the application, plus room for the working copy of each file you open |
| Runtime | Nothing else to install: everything HL7 Pulse needs is in the installer |
| Internet | Needed to download updates and to activate a license online. A license activated online checks in with the license service from time to time; a computer that cannot go online can be activated with a license file instead |
Install & first launch
- Download the installer from the Download page.
- Run it. Setup asks whether to install HL7 Pulse for all users of the PC, which needs administrator approval, or only for you. It then shows the license agreement and what is new in this version.
- Start HL7 Pulse. While you are on the trial, it opens with the license window: choose Continue with Trial, or sign in to activate a license (see License & registration).
The main window opens ready for your first file: start a new document, open local files, or connect to a server, or simply drag files onto the window.
Note: If Windows SmartScreen shows a prompt when you run the installer, the Download page explains how to continue.
Quick start
- Open messages. Drag files, or a whole folder, onto the window, or choose .
- Pick a message. Click it in the Messages list. It appears in full in the HL7 Message panel and broken into fields in HL7 Elements.
- Search. Type in the search box and press Enter. Each search becomes a chip above the panels; remove it with its ×.
- Explore a field. Right-click any field in HL7 Elements to see its unique values, filter on it, or open it in HL7 Lookup.
- Understand the feed. Open for a profile of everything in the tab.
The workspace
The selected message is shown three ways at once: in the message list, exactly as it arrived, and broken into named fields.
- 1Menu bar — File, Edit, Search, View, Tools and Help.
- 2Tabs — one per document; + opens another. An amber dot marks unsaved changes.
- 3Search bar — the search box, the Message Type filter, and the All Messages / This Message scope.
- 4Active filters — a chip for every search and filter in force, and Clear All.
- 5HL7 Message — the selected message exactly as it arrived, with search terms highlighted.
- 6Messages — every message in the tab, 250 to a page; + Column adds any field as a column.
- 7HL7 Elements — the selected message as segments, fields and components, with names and data types.
- 8Paging — move between pages or type a page number; the count of matches is on the right.
- 9Status bar — what the last operation did, and optional resource readings.
Drag the splitters between the panels to give any of them more room. The main commands in each menu:
| Menu | Commands |
|---|---|
| File | New, Add HL7 Files (Local Files..., Remote Files (FTP/SFTP)...), Save, Save As..., Recent Files, Recent Folders, Close Tab, Close All Tabs, Transmission (Send..., Receive..., Bi-directional (Synchronous)...), Exit |
| Edit | Paste HL7 Message, Remove All PHI..., Clear Tab Data, Settings... |
| Search | Advanced... |
| View | HL7 Event Timeline, HL7 Statistics, HL7 Structure, Compare Messages..., Resources Used, Activity Timeline |
| Tools | HL7 Lookup, Feed Definitions... |
| Help | Help Topics, Check for Updates..., Register..., About HL7 Pulse |
Tip: Press F1 in the main window to open the built-in Help.
Updates
HL7 Pulse checks for a new version shortly after it starts. When one is available, Update Available shows what is new, with Remind Me Later and Download & Install. The download is checked before it runs, and Windows may ask you to approve the installer.
HL7 Pulse asks before it closes to install the update, and asks you to save or discard any unsaved changes first. With Reopen files from last session on (the default), your tabs come back when it starts again. If you run a downloaded installer while HL7 Pulse is open, the installer closes it for you. To check for a new version yourself, choose .
Opening Messages
Local files
- Drag and drop files, or whole folders, onto the window. Folders are searched right through, subfolders included.
- Choose and select one or more files.
- Reopen something you used before from or .
Files you add with go into the tab you are working in, so several files can be studied together; to keep them apart, start a new tab first with (Ctrl+N). Files you drop on the window, or reopen from Recent Files or Recent Folders, open in a new tab unless the current tab is empty.
| What HL7 Pulse reads | Details |
|---|---|
| File types | .hl7, .txt, .log, .dat, and any of them compressed as .gz |
| Framing | MLLP-framed messages or plain text, detected automatically, any number of messages per file |
| Delimiters | Read from each message's own MSH segment, so non-standard delimiters work |
| Messages | A message begins with its MSH segment; other text in the file, such as a logging line, is skipped |
When the files contain acknowledgments (ACKs), HL7 Pulse asks whether to load them as well. Large files show their progress on the tab, and the messages can be browsed while the search index is still being prepared.
Remote files (FTP/SFTP)
Open files straight from a server with .
- Pick a saved connection, or enter a new one: Protocol (SFTP, or FTP with Encryption None, Explicit or Implicit), Host, Port, Username and Password.
- Choose Connect. The light at the bottom left turns green and names the server. To move to another server, pick its saved connection and choose Connect; there is no need to disconnect first.
- Browse with Up, by double-clicking folders, or by typing a path and choosing Go.
- Select files and choose Download and Load. Compressed files are unpacked as they load.
Save Profile keeps the connection, and the folder you are in becomes the one it opens next time. Remember password stores the password with the connection, encrypted for your Windows account, so can reconnect without asking.
Caution: Prefer SFTP or FTP with encryption. Plain FTP sends your password, and the messages with any PHI they contain, unencrypted.
Paste from the clipboard
Copy one or more messages from an interface engine, a log or an email, then press Ctrl+V in an empty tab, or choose . To add a message to a tab that already has messages, right-click the message list and choose Paste message.
Receive over TCP
HL7 Pulse can act as an MLLP receiver for testing an interface. Choose , enter the port to listen on, and start listening. Messages are collected as they arrive, and acknowledgments are returned to the sender automatically.
When you are done, choose Stop, then Import: the messages open in a new tab named Received (N), N being the number of messages. The free space on the drive is watched while you listen: when it runs low, messages are turned away, and listening stops before the drive fills.
Tabs & sessions
- Each tab is a separate document with its own working copy, so tabs never interfere with each other. Drag tabs to reorder them.
- Point at a tab to see where its messages came from.
- An amber dot and a save icon appear on a tab with unsaved changes. Closing it, or HL7 Pulse, asks whether to save them.
- Right-click a tab to close it, the other tabs, or all of them; on a tab opened from a server, Refresh (F5) reloads it.
- With Reopen files from last session on in Settings (the default), the tabs you had open come back when HL7 Pulse starts.
Viewing Messages
Message list
| Column | Shows |
|---|---|
| Type | The message type, MSH-9 (ADT^A01, ORU^R01…) |
| Control ID | MSH-10 |
| Patient Name / Patient ID | PID-5 and PID-3 |
| File | The file the message came from |
| Time | The send time, MSH-7, as a date and time |
- + Column adds a column for a field your messages carry, such as OBR-4 or PV1-3. Right-click its header to remove it.
- Click a built-in column's header to sort the whole tab, not just the page you are looking at.
- Move between pages with the arrows, or type a page number.
- Select several messages with Ctrl or Shift and right-click to copy them, copy the rows, or Export list to CSV... (the selected rows, or the page you are on when none are selected). The same menu offers Compare with... when another tab is open, the delete commands, and Paste message when the clipboard holds a message.
HL7 Message panel
The selected message as it arrived, segment by segment, with segment names and field separators colored. Point at any part of it to see which field it is. Search terms are highlighted, each in its own color. A very large message, such as one carrying an embedded document, is shortened on screen; copying it still takes the whole message.
Press Ctrl+A in the panel to select the whole message, then Ctrl+C to copy it. Right-click a segment to duplicate or delete it, or to work with the field under the pointer.
HL7 Elements
The selected message broken into segments, fields, components and sub-components, each with its name; fields also show their HL7 data type. Choose Table View for a flat list or Tree View to expand one segment at a time, under .
- Data types follow the HL7 version the message declares in MSH-12, for every version from 2.1 to 2.8.1: a field's type can differ between versions, and HL7 Pulse shows the right one for each message. Names use HL7 2.5.1's wording.
- Repeating fields are numbered: each repetition of PID-3 is shown in full, with (1), (2) after the field's name.
- Empty fields are hidden unless Show empty fields is on in Settings.
Right-click tools
Right-click any field in HL7 Elements for the tools that work on it.
| Command | What it does |
|---|---|
| Edit... | Change the value, in this message or in every message (see Fields & repetitions) |
| Show unique values | Every distinct value of this field across the messages the list shows, with counts (see Unique Values) |
| Search... | Search for a value in this field only |
| Filter on "value" | Keep only the messages with the same value here |
| Show where field exists | Keep only the messages where this field has a value |
| Look up in HL7 Lookup | Open the HL7 definition of this element, in the message's HL7 version |
| Copy value | Copy the value to the clipboard |
| Duplicate field / Add field repetition… / Delete field | Edit the field's repetitions; on a segment row, duplicate or delete the segment |
Embedded documents
When OBX-5 carries an encoded document, such as a PDF or RTF report sent as an ED value in Base64, a View PDF or View RTF button appears beside the value in HL7 Elements.
The PDF viewer zooms with + and − (or Ctrl and the mouse wheel) and saves the document with Save PDF.... RTF documents open with Copy, Save... and Word Wrap.
Searching & Filtering
Search
Type in the search box and press Enter. The list narrows to the messages that contain the text anywhere, and the text is highlighted in the HL7 Message panel.
- Searches are not case-sensitive, and find partial words:
smithfinds SMITHSON. - Each search becomes a chip. Add more and they combine: a message must contain all of them, and each is highlighted in its own color.
- All Messages searches the whole tab; This Message searches only the selected message.
- Message Type narrows the list to one type, such as ORU^R01.
- With Show recent searches on in Settings, clicking the search box offers your recent searches.
Filters
Filters narrow the list by the value of a particular field. Create them from the field itself: right-click it and choose Filter on "value" or Show where field exists, or check several values in Unique Values and choose Show Only Checked or Exclude Checked.
- Every filter and search in force is a chip. Remove one with its ×, or all of them with Clear All. Right-click a chip that holds a single value to copy it.
- Filters combine with each other, with the search box and with the message type.
- The paging bar shows how many messages match and their share of the tab.
Tip: Filtering only hides messages; nothing is deleted. Clear the chips to see everything again.
Advanced Search
Search by the contents of particular fields with .
- In each group, choose the Segment, Field and, if you like, the Component.
- Choose Exists or Not Exists, and enter a Value to match, or leave it blank to test for the field alone. Tick Wildcard to match any value that contains the text. Right-click the value box and choose Select from messages... to pick a value that occurs.
- Add groups with + Add Group and choose whether they combine with AND or OR.
- Choose Search. The results fill the list, and each group of the query appears as a chip.
Queries you use often can be kept under Saved with Save, and loaded again from the list.
Analysis Tools
HL7 Statistics Updated in 1.0.68
A profile of everything in the tab: what arrived, who sent it, which segments it carried and when it came in. Open it with .
- Message types and Sending facilities (MSH-4), each with a count, a bar and its share. A facility sent in different capitals, or with extra spaces around it, is counted as one row, and messages with no facility are counted as (blank).
- Click a message type or a facility to narrow the whole window to it, and click more to add them. Types and facilities narrow together; Show all goes back.
- Segments: the share of messages carrying each segment, and how often it repeats.
- Volume by hour across the feed's whole span, with every hour that has no messages marked in red and counted.
Filter Messages applies the selected message types and facilities to the message list, whose other filters and searches still apply. Export CSV... saves every section as a spreadsheet, named after the folder the files came from. Click the chart, or Open in HL7 Event Timeline, to study the same hours in detail.
Unique Values
Right-click a field and choose Show unique values to see every distinct value it holds across the tab, with a count and a share for each. With filters in force, only the messages they show are counted.
- Where counts a value only in segments where another field of the same segment has a given value (OBX-3.2 where OBX-8 = H): choose the field and the value, then Apply.
- Type in the filter box to find one value among thousands.
- Check values (select rows and press Space to check several), then choose Show Only Checked or Exclude Checked to filter the message list.
- Copy to Clipboard and Export CSV... take the list to a spreadsheet.
HL7 Event Timeline Updated in 1.0.68
How many messages arrived, hour by hour. Open it with , or from HL7 Statistics, which opens it on the same hours, facilities and message types.
- It opens on an All messages line from the first message to the last. Add message types with + Add; each gets its own line and color.
- Sending facility narrows every line to one facility.
- Hours with no messages are marked in red under the baseline and counted above the chart.
- Choose the range with From and To. Zoom with the mouse wheel and drag to move; right-click and choose Autoscale to see everything again.
- Right-click for Copy to Clipboard or Save Image. The image carries the chart's title and legend.
The timeline counts every message in the tab by its send time (MSH-7); searches and filters on the list do not change it.
HL7 Structure
The shape of the messages you have loaded, measured from the messages themselves: which segments each message type carried, and how often each field and component was filled in. It describes what a feed really sends, not what it is supposed to send; for the HL7 standard itself, use HL7 Lookup. Open it with .
- The grammar notation writes the message shape in HL7's own notation:
[ ]for a segment that is not always present,{ }for one that repeats. - The segment and field details give the share of messages carrying each one. Right-click to filter the message list to the messages that have it.
- Copy Grammar copies the notation. Create PDF... builds a PDF of the whole analysis, including the names and full paths of the files it was built from, and opens it for you to review and save.
- Save as Definition... keeps the analysis as a feed definition; Compare to Definition... checks the loaded messages against one saved earlier.
Feed Definitions
A definition records what a feed contained, so a later set of files can be checked against it: capture a feed while it is known to be good, and compare against it after a change at the sending end.
- Load the feed, open , and choose Save as Definition... with a name and a description.
- In , mark each segment and field Required, Optional or Ignore. Anything present in 99% or more of messages starts as Required.
- Check later files with Compare to Definition... in HL7 Structure, or compare two definitions with Compare to… in the library.
The comparison compares rates, never raw counts, so samples of different sizes compare fairly. A fall of 10 percentage points or more is reported, and anything seen fewer than 20 times in the definition is listed but not judged. Every report can be saved with Create PDF… or Export CSV…, and definitions move between computers with Export… and Import….
Compare Messages
Two messages side by side, field by field. Open , or right-click a message in the list and choose Compare with.... Each side offers the selected message of every open tab.
| Marker | Meaning |
|---|---|
| ≠ amber | The field is in both messages, with different values |
| + green | The field is only in the Compare To message |
| − red | The field is only in the Source message |
Show Field Names labels every line with its HL7 name, Prev and Next step through the differences, and Export... saves the comparison as text or HTML.
HL7 Lookup New in 1.0.68
A built-in reference for HL7 v2: every segment, field, component, data type, table and trigger event, as each version from 2.1 to 2.8.1 defines it. It works offline.
- Open it with , or right-click a segment, field or component in HL7 Elements and choose Look up in HL7 Lookup to open it in the version that message declares.
- Search finds a segment (
PID), a field or component (PID-3,PID-3.4), a data type (CX), a trigger event (ADT^A01), a table (0001), or any words (patient), across every version. - Pick a version under HL7 version to see each page as that version defines it; a field's page also shows how it changed between versions.
Short summaries at the top of pages are HL7 Pulse's own wording, marked as such. When the exact meaning matters, refer to the HL7 standard.
Activity Timeline Updated in 1.0.68
Your imports, searches, filters, edits, deletions, PHI removals and saves are recorded with the time. Open it with , and use the calendar to look back over about 30 days.
Double-click an entry, or right-click it and choose Replay, to go back to that point. If the tab is still open, HL7 Pulse switches to it and shows the list as it was then. If the tab has been closed, HL7 Pulse replays your steps up to that entry: in an open tab that already holds the same files, or by reopening the original files in a new tab, as long as they are still where they were. A session that began by pasting a message cannot be replayed.
Resources Used
adds live readings to the status bar: the disk space used by your open tabs and the free space on that drive, then CPU, memory, disk and network activity. Right-click them and choose Hide Resource Stats to put them away.
Editing Messages
Edits change the tab's working copy; the files you opened are not changed until you save. Editing respects the message's own delimiters and never renumbers fields, so messages stay well formed.
Caution: There is no undo. To discard changes, close the tab without saving, then open the original file again. Consider saving a copy before changing every message at once.
Fields & repetitions
- Edit... changes a field, a component or a sub-component, in This message only or in All messages that have it.
- Add field repetition… adds a repetition after the one you clicked (an empty field is filled instead), with a box for each component of the field's data type; + Add component shows more, and the message's sub-component separator, usually
&, separates sub-components. - Duplicate field adds a copy of the repetition you clicked; Delete field removes it, or clears the field when it is the only one.
Field numbers never shift: PID-5 is always PID-5.
Segments
Right-click a segment in the HL7 Message panel, or its row in HL7 Elements, and choose Duplicate segment to insert a copy after it, or Delete segment. The MSH segment cannot be duplicated or deleted, and a message always keeps at least one segment.
Deleting messages
Right-click a message in the list and choose Delete this message, Delete all messages except this one, Delete all messages above or Delete all messages below. With a search or filter in force, these work among the messages the list shows, in the order it shows them; hidden messages are kept. Every delete asks first, and a long delete can be cancelled with nothing deleted.
Remove PHI
Replace Protected Health Information with realistic substitutes, so messages can be shared for troubleshooting, testing or vendor support. Choose , then the scope: Selected message only or All messages.
- Names, identifiers, sex, dates of birth, addresses, phone numbers, and visit and account numbers are replaced: among them PID-2, PID-3, PID-5, PID-7, PID-8, PID-11, PV1-19 and the prior-patient fields in MRG. Other dates, such as admission and message times, are kept.
- Identifiers keep their shape: the same length, punctuation and leading zeros, so systems that read fixed-width identifiers behave the same on the copy.
- One patient keeps one set of substitutes across the whole tab, so admissions can still be followed and patients counted.
- Notes in OBX-5 and NTE-3, and custom Z-segments, are cleaned of the names and identifiers the message declares elsewhere.
Caution: Removal finds the identifiers a message declares in its fields. A name that appears only in free text, and nowhere else in the message, is not recognized. Review de-identified messages before sharing them, and follow your organization’s privacy policies.
Saving & Sending
Saving
- (Ctrl+S) writes a tab opened from one file back to that file, or server; for other tabs, Ctrl+S opens Save As.
- asks where: Save Locally for a file on this computer or the network, or Save to Remote Server.
Your edits are included. A save larger than 800 MB is split into several files, and a file opened from .gz is saved uncompressed.
Note: Saving writes the messages the list shows, in the order they were opened. With a search or filter in force, only the matching messages are written, which is also the way to save a subset. Clear the chips first to save everything.
Saving to a server
Choose and Save to Remote Server, connect with a saved or new connection, pick the folder, and save. A tab opened from a server connects to that server and opens the folder its files came from.
Send over TCP
Send messages to an interface engine or any MLLP receiver with .
- Enter the Host / IP Address and Port, or pick a Profile. Type a name and choose Save to keep the settings as a profile.
- Timeout (seconds) limits the wait for each reply; Retry on connection failure keeps trying until the connection succeeds or you cancel.
- Send the Selected message only, All messages, or the Filtered messages of your current search and filters, with the exact count shown.
Each message waits for the receiver's acknowledgment before the next is sent. If the receiver rejects a message (AE or AR), its reply is shown and you choose whether to send the message again. Progress and the transfer speed are shown as it goes.
Caution: Sending transmits real message content. Check the host and port, and that you are permitted to send to that system, and test with a single message first.
Bi-directional exchange
Send a query and receive the application response on the same connection, such as a QRY^A19 answered by an ADR^A19, with .
- Choose Send & Wait. The response appears with its segments colored, and the line above it gives its type, control ID, MSA-1 code and how long it took.
- The response should acknowledge the control ID you sent (MSA-2); a mismatch is flagged.
- Tick Acknowledge the response if the other system expects an ACK for its reply.
- Copy Response copies the reply; Open in New Tab opens every response you received as messages you can search and analyze.
Reference
Settings
Open . Choose OK to apply your changes or Cancel to discard them.
| Setting | Effect |
|---|---|
| Appearance | Light or Dark |
| HL7 Message View | Tree View or Table View for HL7 Elements |
| Show empty fields | Shows fields and components with no value |
| Show recent searches | Offers recent searches in the search box |
| Remember window size and position | Restores the window where you left it |
| Reopen files from last session | Reopens the tabs that were open when you closed HL7 Pulse |
| Syntax Highlighting | The colors of segment names and field delimiters |
Keyboard shortcuts
| Keys | Action |
|---|---|
| F1 | Open Help |
| Ctrl+N | New tab |
| Ctrl+S | Save the current document |
| Ctrl+V | Paste an HL7 message into a new or empty tab |
| F5 | Refresh a tab opened from a server |
| Ctrl+A, Ctrl+C | Select and copy the whole message, in the HL7 Message panel |
| Space | Check or uncheck the selected rows, in Unique Values |
| Ctrl + mouse wheel | Zoom, in the PDF viewer |
| Esc | Cancel or close most dialogs |
In HL7 Lookup, Ctrl+F goes to the search box, Enter opens the highlighted suggestion, and Alt+← and Alt+→ go back and forward.
License & registration
HL7 Pulse starts with a 30-day free trial. While it runs, the license window opens with HL7 Pulse; choose Continue with Trial to carry on.
- Activate License: sign in with the email and password of your hl7pulse.com account.
- Import License File, under Having network issues?, activates a computer that cannot reach the activation service. Sign in to download your license file.
- opens activation at any time during the trial; shows your license.
Need a license? See Pricing.
Troubleshooting
Files open but show no messages
Check that the file contains HL7 messages that start with an MSH segment. Text that does not begin with MSH is skipped, and a file with no HL7 content at all is reported and left out.
A search finds nothing
Look at the chips above the panels: a filter or message type may be hiding the matches. Check that the scope is All Messages, and try part of the word. While a newly opened file is still being prepared for search, the paging bar says so.
Text looks garbled
HL7 Pulse reads files as UTF-8, or by their byte-order mark when they have one. If characters look wrong, the file may use another encoding; MSH-18 can say which.
Cannot connect to an FTP or SFTP server
Check the host, port, username and password, and that a firewall allows the connection. For FTPS with a self-signed certificate, tick Trust server certificate, and only for a server you know. A “Permission denied” error from the server means the account has no access to that folder: read access to open files, write access to save them.
Receiving: the port will not open, or nothing arrives
Another program may be using the port; choose another, above 1024. If nothing arrives, check the sender's host and port, any firewall between you, and that the sender uses MLLP framing.
Some fields have no names
Custom Z-segments have no standard definition, so their fields show positions only. Names for standard segments come from the HL7 version the message declares.
“database table is locked” or “Search query timed out”
Another operation is still working on the tab; let it finish and try again. A query that times out is usually too broad: narrow it with filters first.
HL7 Pulse is slow with very large files
Close tabs you are not using and narrow the list with filters. shows how the computer is coping.
Still stuck? Check for a newer version with , then contact support. The log files in %LOCALAPPDATA%\HL7Pulse\Logs help us find the cause.
Where HL7 Pulse keeps its files
| What | Where |
|---|---|
| Settings | %APPDATA%\HL7Pulse\settings.json |
| Feed definitions | %APPDATA%\HL7Pulse\Definitions |
| Working copies of open tabs | %LOCALAPPDATA%\HL7Pulse\Sessions |
| Activity Timeline | %LOCALAPPDATA%\HL7Pulse\activity-timeline.db |
| Logs | %LOCALAPPDATA%\HL7Pulse\Logs |
Caution: The working copies of open tabs hold the messages you opened, including any PHI. Handle them, and anything you save, according to your organization’s data-handling policies.
Third-party notices
HL7 Pulse is built with open-source components, listed with their licenses under , Third-party notices. HL7 Lookup's definitions come from the HL7 v2 models in nHapi (MPL-2.0) and from HL7 Terminology 7.4.0, published by HL7 International under CC0.
HL7 is a registered trademark of Health Level Seven International. Screens show HL7 Pulse 1.0.68 with a synthetic feed: every name, identifier, facility and document in them is invented.





























