QAS-log supports ADIF (Amateur Data Interchange Format) version 3.1.4 for moving QSO data between logging programs and QRZ.
Pull your existing QSOs from QRZ Logbook directly into QAS-log.
Open the QRZ Import panel using Shift+?, or from the import button in the interface. You'll need a QRZ Logbook API key configured in settings — if one isn't set, you'll see a warning toast.
The import panel offers three time ranges:
| Option | Description |
|---|---|
| Last 24 Hours | QSOs from the past day |
| Last 7 Days | QSOs from the past week |
| Last 30 Days | QSOs from the past month |
Select a range and click Fetch QSOs. The app fetches your QSO data through the /api/logger proxy (your API key never leaves the server round-trip) and imports the results into your local storage.
Imported QSOs are checked against your existing log. A QSO is considered a duplicate if all four of these match an existing record:
Duplicates are silently skipped — you'll see a count of how many were imported vs. skipped.
QRZ returns raw lowercase ADIF field names. On import, these are automatically normalized to QAS-log's internal property names. For example:
my_sig + my_sig_info with value POTA → my_pota_refmy_sig + my_sig_info with value WWFF → my_wwff_refsig + sig_info with value POTA → pota_refsig + sig_info with value WWFF → wwff_refThis normalization ensures that POTA, SOTA, and WWFF references imported from QRZ are correctly recognized throughout the app — in the logbook display, search, map plotting, and re-export.
You can also import QSOs from any .adi file exported by another logging program.
Click the Import ADIF button and select a .adi file. The app parses the file, shows a confirmation dialog with the QSO count and filename, and imports the records.
The parser reads standard ADIF field-length encoding (<FIELD_NAME:LENGTH>VALUE) and handles:
< characters (uses substring extraction, not regex-based capture)<EOR> tags, with an optional <EOH> headerOnly records with at least a callsign are imported. Each imported QSO gets a unique ID and is marked with source: "imported" so you can distinguish manual logs from imports.
Same logic as QRZ import — duplicates are matched on callsign + date + time on + band and skipped automatically. You'll see a summary like "Imported 47 QSOs, skipped 3 duplicates."
Export your entire log as a downloadable .adi file.
Click the Save ADIF button in the logbook interface. The file downloads as qsos_YYYY-MM-DD.adi with the current date.
The exported file uses ADIF version 3.1.4 with one field per line for readability:
// ADIF Export from QAS-log
<ADIF_VER:5>3.1.4
<PROGRAMID:7>QAS-log
<EOH>
<CALL:4>W1AW
<QSO_DATE:8>20260327
<TIME_ON:6>143022
<TIME_OFF:6>143522
<FREQ:7>14.0740
<BAND:3>20m
<MODE:3>FT8
...
<EOR>
Field lengths use UTF-8 byte length rather than JavaScript string length, so names with accented characters (e.g., "Jose" with accent) are encoded correctly.
Every non-empty field on the QSO is exported. The full set:
Contact fields:
CALL, QSO_DATE, TIME_ON, TIME_OFF, FREQ, BAND, MODE, RST_SENT, RST_RCVD, NAME, STATE, GRIDSQUARE
Other station's program references:
SIG, SIG_INFO, POTA_REF, SOTA_REF, WWFF_REF
Your station info:
STATION_CALLSIGN, MY_NAME, MY_GRIDSQUARE, MY_STATE, MY_CITY, MY_COUNTRY, MY_RIG, MY_ANTENNA, TX_PWR, MY_ITU_ZONE, MY_CQ_ZONE, MY_DXCC, MY_POTA_REF, MY_SOTA_REF, MY_WWFF_REF, MY_SIG, MY_SIG_INFO
Entity data:
COUNTRY, DXCC, CQ_ZONE, ITU_ZONE
Numeric fields like DXCC, CQ_ZONE, and ITU_ZONE use a null-check instead of truthiness, so entity 0 is correctly exported rather than silently dropped.
ADIF uses SIG/SIG_INFO as generic fields for "special interest group" activity. QAS-log translates between these generic fields and the dedicated program reference fields.
The SIG/SIG_INFO pair represents the other station's program activity:
| Scenario | SIG | SIG_INFO | Also Emitted |
|---|---|---|---|
| POTA ref only | POTA |
The park reference | — |
| WWFF ref only | WWFF |
The WWFF reference | — |
| Both POTA and WWFF | POTA |
The park reference | WWFF_REF as a separate field |
POTA takes priority for SIG. When both are present, WWFF is preserved as the dedicated WWFF_REF field so no data is lost.
SOTA always uses dedicated SOTA_REF / MY_SOTA_REF fields (never SIG).
If you have an activation reference set in Station Settings:
MY_SIG=POTA, MY_SIG_INFO=<your ref>MY_SIG=WWFF, MY_SIG_INFO=<your ref>MY_SIGIn all cases, the dedicated fields (MY_POTA_REF, MY_WWFF_REF) are also emitted alongside MY_SIG, so importing programs that understand either convention will pick up the data.
The reverse mapping is applied:
| Incoming Fields | Mapped To |
|---|---|
MY_SIG=POTA + MY_SIG_INFO=US-0001 |
my_pota_ref: "US-0001" |
MY_SIG=WWFF + MY_SIG_INFO=KFF-0001 |
my_wwff_ref: "KFF-0001" |
SIG=POTA + SIG_INFO=US-0001 |
pota_ref: "US-0001" |
SIG=WWFF + SIG_INFO=KFF-0001 |
wwff_ref: "KFF-0001" |
If a dedicated field (e.g., POTA_REF) is already present on the record, it takes precedence over the SIG mapping. The raw my_sig, my_sig_info, sig, and sig_info fields are removed after mapping — the app only stores the resolved program-specific fields.
When you push a QSO to QRZ (either automatically on save or via bulk upload), the ADIF record includes the same station information fields as a file export: STATION_CALLSIGN, MY_GRIDSQUARE, MY_RIG, TX_PWR, MY_CITY, MY_STATE, MY_COUNTRY, and all other "MY_" fields. This means your QRZ logbook entries have the same fidelity as your exported files.
The one difference: QRZ uploads do not include SIG/SIG_INFO transform — they emit POTA_REF, WWFF_REF, etc. as dedicated fields, since QRZ understands these natively.
How ADIF field names translate to QAS-log internal property names:
| ADIF Field | App Property | Notes |
|---|---|---|
CALL |
call |
|
QSO_DATE |
qso_date |
Format: YYYYMMDD |
TIME_ON |
time_on |
Captured when callsign is entered (start of QSO) |
TIME_OFF |
time_off |
Captured at save time (end of QSO) |
FREQ |
freq |
In MHz |
BAND |
band |
Lowercase: 20m, 40m, 70cm, etc. |
MODE |
mode |
|
RST_SENT |
rst_sent |
|
RST_RCVD |
rst_rcvd |
|
NAME |
name |
|
STATE |
state |
|
GRIDSQUARE |
gridsquare |
|
POTA_REF |
pota_ref |
Other station's park reference |
MY_POTA_REF |
my_pota_ref |
Your park reference |
SOTA_REF |
sota_ref |
Other station's summit |
MY_SOTA_REF |
my_sota_ref |
Your summit |
WWFF_REF |
wwff_ref |
Other station's WWFF reference |
MY_WWFF_REF |
my_wwff_ref |
Your WWFF reference |
STATION_CALLSIGN |
my_call |
|
MY_NAME |
my_name |
|
MY_GRIDSQUARE |
my_gridsquare |
|
MY_STATE |
my_state |
|
MY_CITY |
my_city |
|
MY_COUNTRY |
my_country |
|
MY_RIG |
my_rig |
|
MY_ANTENNA |
my_antenna |
|
TX_PWR |
tx_pwr |
|
MY_ITU_ZONE |
my_itu_zone |
|
MY_CQ_ZONE |
my_cq_zone |
|
MY_DXCC |
my_dxcc |
|
COUNTRY |
country |
|
DXCC |
dxcc |
Numeric — entity 0 is preserved |
CQ_ZONE |
cqzone |
Numeric |
ITU_ZONE |
ituzone |
Numeric |
MY_SIG |
(mapped, then removed) | See SIG handling above |
MY_SIG_INFO |
(mapped, then removed) | See SIG handling above |
SIG |
(mapped, then removed) | See SIG handling above |
SIG_INFO |
(mapped, then removed) | See SIG handling above |
qrz:yes