You have a spreadsheet of values for poles that are already on your map, and you want those values on the nodes without manually adding each one. That is what Upload Node Attribute Data is for.
.png?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kemY4dnF2MjRlcWhnLmNsb3VkZnJvbnQubmV0L3VzZXJmaWxlcy80MTE2Ni81MzA0MC9ja2ZpbmRlci9pbWFnZXMvcXUvMjAyNi9pbWFnZSg5MikucG5nIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzg3NTcxNzczfX19XX0_&Signature=Kxc2cRYhDQxRkRJn-Ypw4iZ1VA9pW30iAHQn1dVYK3mkTwg7J5yzjx8yLpGxbOL9xIZA1tZv~VbmIVyhzmQOY9Bny-QrbpJa267TBGDOG-EnCbO9A-c8HlCzBjJttVehjuGxS2dEZBOmGkUi9qmxh6au81ngOMAmIqFgi13dsnb9OeBTfxykdvGg9ivVBDMAC4G3~5sjN1LSRBXoOa5R49TQRg60OV-jaIHMqmwiZR4aR6LogVsmNycaztZ7iL94w1DWjqncTHkMqrZsMOihyLSjMs6Kz-GaDIJWpWrpYTpimJMeDNGRN83TeZdUPFGqUl1b6~zeCnxZhZCHoHEqcw__&Key-Pair-Id=K2TK3EG287XSFC)
Upload Node Attribute Data takes a spreadsheet and writes the values in it onto nodes that already exist in the job you have open. Each row in your file points at one existing node, and each remaining column becomes an attribute value on that node. It is an update only. It does not create new nodes, and it does not move nodes into sub jobs. If you need to seed brand new locations onto the map, that is Upload Node Data, covered in the Pre-Design Manual.
Read this part before you upload, because it surprises people.
Each attribute you upload replaces the existing attribute. It is not a merge. If a node already has a value for pole_height that came from the field, and your spreadsheet has a pole_height column, the uploaded value takes the place of what was there. Anything else that was stored on that same attribute goes with it.
A blank cell clears the attribute. If a row has your identifier filled in but leaves a column empty, Katapult Pro writes an empty value to that attribute. This is on purpose, so you can blank out a field in bulk. It also means that leaving a cell blank is not a way to skip an attribute. To leave an attribute alone, delete that column from the spreadsheet entirely.
Save your file as .csv, .xlsx, or .xls.
There are no required columns for this upload, but there is one hard requirement: at least one column has to hold a value that already exists on the nodes in your job (a unique attribute), so Katapult Pro can tell which node each row belongs to. Pole tag, SCID, and latitude and longitude are the usual choices.
Name your other column headers to match the attributes in your job model, in lower case with underscores instead of spaces (for example pole_height, proposed_riser). Headers are matched without regard to capitalization. Anything that does not match an attribute in your model has to be mapped by hand in the next step.
The formatting conventions for each attribute type (dropdowns, checkboxes, tables, dates, pole tags) are the same as they are for Upload Node Data, and the Pre-Design Manual has the full reference with an example file. Three of them come up often here:
Company::Tag Text::Owner, three parts separated by double colons. The last part answers whether that company owns the pole, so yes, true, 1, or y all read as owned, and anything else reads as not owned. The company name is corrected against your company picklist automatically.table_name::column_name as the header. Several :: columns that share the same table name combine into one multi row table on the node.0, false, f, no, and n as unchecked, in any capitalization. Anything else checks the box.
Two more behaviors worth knowing while you build the file. A leading asterisk on a header, as in *reference_number, writes that value to the job metadata instead of to the node, which is handy for stamping something job wide. And if you deliberately repeat a header, for example two note columns, the second value is stored alongside the first rather than overwriting it.
With the job open, drag your file from your computer onto the map. The upload dialog opens with a tile for each kind of import: Upload Node Data, Upload Node Attribute Data, Upload Connection Data, Upload Connection Attribute Data, Upload Wire Data, and Custom Import.
Click Upload Node Attribute Data.

Leave the Use address instead of coordinates checkbox unchecked. It appears in this dialog, but it is built for the Upload Node Data path and is not supported for attribute uploads. Match on latitude and longitude, node_id, or one of your own attributes instead.
If a header in your file does not line up with an attribute in the job's model, the dialog opens a Fix Headers section and shows Error: Some attributes don't exist in these models. Import stays blocked until every unmatched header is resolved.
You have two ways to clear it: map the header to the right attribute using the dropdown, or leave it unmapped so that column is ignored. If the attribute genuinely does not exist in your model yet, add it in the Model Editor and upload the file again.
.png?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kemY4dnF2MjRlcWhnLmNsb3VkZnJvbnQubmV0L3VzZXJmaWxlcy80MTE2Ni81MzA0MC9ja2ZpbmRlci9pbWFnZXMvcXUvMjAyNi9pbWFnZSg5MykucG5nIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzg3NTcxNzczfX19XX0_&Signature=JVwh8GepqFaOAArDpF9mGH9mN0RMGSHy-y5khYApcqlOFF-N9TRPIRSi0lBpnzr~u8N9QQh42UJ1DaelYqvtKcaL29XPj6DhQHRpVd6bNqxZpkIZXDifAqC8IvtGjiUd1vAE~BNhv-t-41YXvftsTiaJWQSMIchjxuUakFyxsGDVv~zxudkcyM4LHaQ2udt8KBg0YXz0Vhxv5XWATSHSLvSMTKE2aEUVvI4iTUh0K4fRczBOAlTQQm42tjb7H1RarEx-EZITxMKs25JapYLxWlyP1la05CDOsSkN6S0MnE8bxL~7u8Db8~W6wRRSXl8F6WZbfDp51NNQ~~odAGvDCw__&Key-Pair-Id=K2TK3EG287XSFC)
Next, find the Unique Identifying Attribute Column dropdown, under the heading Select a unique attribute to identify each node. This is how Katapult Pro decides which existing node each row updates, and nothing imports until you choose one.
You have three kinds of choices:
latitude and a longitude column. A row matches a node when both coordinates land within roughly 1.1 meters of it. Keep in mind that in this mode the coordinates themselves are not updated on the node, even if your file has slightly different numbers. Only your other columns are written.
.png?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kemY4dnF2MjRlcWhnLmNsb3VkZnJvbnQubmV0L3VzZXJmaWxlcy80MTE2Ni81MzA0MC9ja2ZpbmRlci9pbWFnZXMvcXUvMjAyNi9pbWFnZSg5NCkucG5nIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzg3NTcxNzczfX19XX0_&Signature=VNTsgKHF3MOr-Eo77MagVeMtUKylmkK~DpleOeniR56tB29k8s1iGbdhWZmCKOWdlPa3h3bsL48iC3nSrQYauqB9NQYpmRPpqfIgcErYsmmp1U7wClA-Tk4jzdfTrIURynjZ9gdxQJ0GW8ncNSG-PYTPWp6BOgaDxma7sLDIt9XGAqG5tNHp-MnhEqJQT65A9oCCi39VuEtnHt39nrhU4Jo8FLJuaTGtXJQIAphqSIfacjVJhzD13XkFodxcEb7UCwm2sFSVita3~A92efVm-KPilsFazxGoB-HB1GYR4ArSOMP0d-lJ88~ZymDd1uM1mdpSKw1IoboDdUzU-cxMYg__&Key-Pair-Id=K2TK3EG287XSFC)
As soon as you pick an identifier, the dialog reports what it found at the top. Warnings let you continue. Errors do not.
When the match count looks right, click Add to Job. Your values are written to the matched nodes.
Double click one of the updated nodes to open the Node Info panel and confirm the values landed where you expected. If Attribute History is turned on for your company, the panel's Attribute History section shows what the upload changed. See Attribute History: The Basics.
Upload Connection Attribute Data works exactly the same way, on connections instead of nodes. Everything above applies, with three differences:
latitude1, longitude1, latitude2, and longitude2 columns.conn_id, which is the connection's own unique ID, the way node_id works for nodes.
job_name, job_path, and app_type columns are the sub job routing fields for Upload Node Data, and they are ignored here without a warning. Open each sub job and run the upload there, or use the API.node_id, or one of your own attributes.