shipping
This field is optional, but omitting it may leave out functionality on Prisjakt for your offers
Description
The shipping attribute is used to set cost, time and methods of delivery. It is a nested and repeatable attribute, send one entry per combination of country, delivery service and price. Shipping can be built from two different sources, the values you send in your feed and the shipping services you configure in Business Center. The two sources are never combined for the same offer. If an offer has at least one valid shipping entry in the feed we use the feed values and ignore your Business Center configuration completely. Only when an offer ends up without any valid shipping entry do we fall back to your Business Center shipping configuration. This means that a shipping entry that is rejected during validation is not repaired by Business Center values, it is simply removed. Please note, that shipping is required for all products sold on French market.
Sub-attributes
This is a nested attribute, every entry is built from the sub-attributes below.
| Sub-attribute | Required | Type | Limit | Description |
|---|---|---|---|---|
country | yes | enum | 2 characters | Country the entry applies to, as an ISO 3166-1 alpha-2 code, for example SE. You can send it in any casing, we normalise it to upper case before validating. A missing or unknown country code discards the whole entry. |
price | yes | price | 255 characters | Delivery cost including VAT, written as amount and ISO 4217 currency code, for example 49.00 SEK. Use 0 SEK for free delivery. If you leave the currency out we use the currency of your feed. A missing or unparseable price discards the whole entry. |
region | no | string | 50 characters | Region or state inside the country, for example Skåne. Accepted for compatibility with the Google specification, but it is currently not shown to users. A value longer than 50 characters discards the whole entry. |
service | no | string | 50 characters | Name of the delivery service as you want it presented to users, for example Express. A value longer than 50 characters discards the whole entry. |
min_handling_time | no | integer | whole days, 0 or higher | Lowest number of days between receiving the order and handing the parcel over to the carrier. Must be lower than or equal to max_handling_time. If any one of the four time sub-attributes is missing or invalid, all four are dropped from the entry. |
max_handling_time | no | integer | whole days, 0 or higher | Highest number of days between receiving the order and handing the parcel over to the carrier. If any one of the four time sub-attributes is missing or invalid, all four are dropped from the entry. |
min_transit_time | no | integer | whole days, 0 or higher | Lowest number of days the carrier needs to deliver the parcel. Must be lower than or equal to max_transit_time. If any one of the four time sub-attributes is missing or invalid, all four are dropped from the entry. |
max_transit_time | no | integer | whole days, 0 or higher | Highest number of days the carrier needs to deliver the parcel. If any one of the four time sub-attributes is missing or invalid, all four are dropped from the entry. |
carrier | no | string | 50 characters | Prisjakt extension, not part of the Google specification, and only read from feeds in the Prisjakt format. Name of the carrier, for example PostNord. A value longer than 50 characters drops only carrier and keeps the rest of the entry. |
delivery_type | no | enum | one of the allowed values, lower case | Prisjakt extension, not part of the Google specification, and only read from feeds in the Prisjakt format. One of home, in_store_pickup, mailbox, package_locker or service_point, written in lower case. Any other value drops only delivery_type and keeps the rest of the entry. |
Effects When Used
- This information will be visible for the users in offer listing.
- Your feed values are used exactly as you sent them, and your Business Center shipping configuration is ignored for that offer. There is no per sub-attribute merge between the two sources.
Effects When Omitted
- If your shop has shipping services configured in Business Center, we build the shipping entries from them instead, one entry per country configured on every service that matches the offer.
- A Business Center shipping service only matches an offer when all of the following are true. Its label condition matches the shipping_label values of the offer, its weight and size condition matches the shipping_weight and dimensions of the offer, and a price can be determined for the offer. If nothing matches, the offer is published without shipping information
- Business Center services can hold delivery information that cannot be expressed in a feed at all, such as order cut off time, which weekdays count as handling and transit days, sustainable delivery and services that are only available to members.
- Business Center services can hold price rules, for example free delivery above a given order value. Such rules are evaluated against the current selling price of the offer, and are recalculated whenever the price changes, so a sale price can move an offer into free delivery automatically.
- If your shop has no shipping configuration in Business Center either, the offer is published without any shipping information.
Related Fields
Validation Rules
- A maximum of 100
shippingentries is allowed per offer - Submit complete shipping information.
countryandpriceare required in every entry - Entry level errors. An error in
country,price,regionorservicediscards that wholeshippingentry. The offer itself is still ingested, it is only that shipping entry that is lost - Sub-attribute level errors. An error in
carrierordelivery_typeonly drops that single sub-attribute, the rest of the entry is kept - All entries discarded. If every
shippingentry you sent is discarded, the offer is treated as having no shipping at all, and your Business Center shipping configuration is used instead if you have one - Submit shipping cost including VAT, written as amount and ISO 4217 currency code, for example
49.00 SEK. The amount must be0or higher and lower than1000000000. If you leave the currency out we use the currency of your feed - Handling time and transit time should be specified in whole days,
0or higher - Times are all or nothing. If you provide any of
min_handling_time,max_handling_time,min_transit_timeormax_transit_timeyou must provide all four. If you provide only some of them, all four are dropped and the entry is published without any delivery times (validation_shipping_time_missing_values) - If you provide information about handling or transit time then
min_handling_timeshould be lesser or equal tomax_handling_timeandmin_transit_timeshould be lesser or equal tomax_transit_time. If not, all four time values are dropped - Attributes
carrieranddelivery_typeare specific to Prisjakt and are not available in the Google Specification. They are used to provide a richer UI to end users on our page - Attributes
carrieranddelivery_typeare only read from feeds in the Prisjakt format, that is XML using the Prisjakt namespace or CSV using the Prisjakt column format. In a plain Google feed they are ignored - Attribute
carriercan be any string value up to 50 characters, but only the following values will be represented with iconsairmee,best,bring,budbee,city,dachser,db,dhl,dooris,early,fedex,instabox,jetpak,postnord,ups,gls - Attribute
delivery_typecan only take specific enum values, written in lower case. If the provided value is not in the allowed enum values or is not provided, the status is unset. Allowed values arehome,in_store_pickup,mailbox,package_locker,service_point - Casing. Casing is handled per sub-attribute.
countryis normalised to upper case before it is validated, so you can send it in any casing.delivery_typeis not normalised and must be sent in lower case, any other casing is treated as an unknown value and dropped.region,serviceandcarrierare free text and are stored exactly as you send them
Best Practices
Do
- Keep shipping information as precise as possible. Add multiple shipping attributes if shipping cost or time varies for different country, region or service.
- Decide whether you want to manage shipping in the feed or in Business Center, and keep that choice for the whole offer. The feed always wins as a whole, so a partially filled feed entry cannot be completed from Business Center.
- If any of
min_handling_time,max_handling_time,min_transit_time,max_transit_timeis present then all those fields must be present for the current shipping item. - If you rely on Business Center shipping and your services use labels, send a matching shipping_label on your offers. A service that has labels only applies to offers carrying at least one of those labels, and a service without labels only applies to offers that have no
shipping_labelat all. - If you rely on Business Center shipping and your services have a weight condition, send shipping_weight. If they have a size condition, send all three of shipping_length, shipping_width and shipping_height. Offers that are missing the values a condition refers to will never match that service.
- If you rely on Business Center price rules, make sure the currency of the shipping service is the same as the currency of your offers. Price rules are only applied when the two currencies match.
- Overestimate if you can't provide accurate shipping cost or delivery times.
Don´t
- Don't send a shipping entry with only some of the four time values. Sending
min_handling_timeandmax_handling_timewithout the transit times means the entry is published with no delivery time at all. - Don't expect Business Center to fill in the gaps of an incomplete feed entry, the two sources are never merged.
- Don't use a
regionorservicevalue longer than 50 characters, it discards the whole shipping entry and not just that value. - Don't provide comma or point as separator for both thousands and fractional part of the shipping price, i.e. we don't support
1,000,00 SEKand1.000.00 SEKformats - Don't send
carrierordelivery_typein a plain Google formatted feed, they are only read from feeds in the Prisjakt format.
Example Values
Here are examples of how a valid shipping value should look like in XML and CSV (with header) respectively.
- XML
- CSV
<g:shipping>
<g:country>SE</g:country>
<g:region>Skåne</g:region>
<g:service>Express</g:service>
<g:price>25.00 SEK</g:price>
<g:min_handling_time>1</g:min_handling_time>
<g:max_handling_time>2</g:max_handling_time>
<g:min_transit_time>1</g:min_transit_time>
<g:max_transit_time>3</g:max_transit_time>
<g:delivery_type>home</g:delivery_type>
<g:carrier>PostNord</g:carrier>
</g:shipping>
Click to show more valid XML examples
<g:shipping>
<g:country>SE</g:country>
<g:region>Skåne</g:region>
<g:service>Express</g:service>
<g:price>25.00 SEK</g:price>
<g:min_handling_time>1</g:min_handling_time>
<g:max_handling_time>2</g:max_handling_time>
<g:min_transit_time>1</g:min_transit_time>
<g:max_transit_time>3</g:max_transit_time>
<g:delivery_type>home</g:delivery_type>
<g:carrier>PostNord</g:carrier>
</g:shipping>
<g:shipping>
<g:country>SE</g:country>
<g:price>49.00 SEK</g:price>
</g:shipping>
<g:shipping>
<g:country>SE</g:country>
<g:region>Skåne</g:region>
<g:service>Home Delivery</g:service>
<g:price>0 SEK</g:price>
</g:shipping>
<g:shipping>
<g:country>SE</g:country>
<g:region>Skåne</g:region>
<g:service>Express</g:service>
<g:price>25.00 SEK</g:price>
<g:min_handling_time>1</g:min_handling_time>
<g:max_handling_time>2</g:max_handling_time>
<g:min_transit_time>1</g:min_transit_time>
<g:max_transit_time>3</g:max_transit_time>
</g:shipping>
<g:shipping>
<g:country>SE</g:country>
<g:region>Skåne</g:region>
<g:service>POST</g:service>
<g:price>5.00 SEK</g:price>
<g:min_handling_time>1</g:min_handling_time>
<g:max_handling_time>5</g:max_handling_time>
<g:min_transit_time>1</g:min_transit_time>
<g:max_transit_time>3</g:max_transit_time>
</g:shipping>
<g:shipping>
<g:country>SE</g:country>
<g:region>Skåne</g:region>
<g:service>Express</g:service>
<g:price>45.00 SEK</g:price>
<g:min_handling_time>1</g:min_handling_time>
<g:max_handling_time>8</g:max_handling_time>
<g:min_transit_time>3</g:min_transit_time>
<g:max_transit_time>10</g:max_transit_time>
</g:shipping>
shipping(country:region:service:price:min_handling_time:max_handling_time:min_transit_time:max_transit_time:delivery_type:carrier)
SE:Skåne:Express:25.00 SEK:1:2:1:3:home:PostNord
Click to show more valid CSV examples
shipping(country:region:service:price:min_handling_time:max_handling_time:min_transit_time:max_transit_time:delivery_type:carrier)
SE:Skåne:Express:25.00 SEK:1:2:1:3:home:PostNord
shipping(country:price)
SE:49.00 SEK
shipping(country:region:service:price)
SE:Skåne:Home Delivery:0 SEK
shipping(country:region:service:price:min_handling_time:max_handling_time:min_transit_time:max_transit_time)
"SE:Skåne:Express:25.00 SEK:1:2:1:3,SE:Skåne:POST:5.00 SEK:1:5:1:3,SE:Skåne:Express:45.00 SEK:1:8:3:10"
Error Codes
Below you will find possible error codes generated when validating this field alongside with an example in XML and CSV that would trigger the code. Please refer to the validation rules to understand the cause.
- XML
- CSV
<g:shipping>
<g:country>SE</g:country>
<g:region>Skåne</g:region>
<g:service>Express</g:service>
<g:price>5.00 SEK</g:price>
<g:min_handling_time>-1</g:min_handling_time>
<g:max_handling_time>2</g:max_handling_time>
<g:min_transit_time>1</g:min_transit_time>
<g:max_transit_time>3</g:max_transit_time>
</g:shipping>
<g:shipping>
<g:country></g:country>
<g:region>Skåne</g:region>
<g:service>Express</g:service>
<g:price>5.00 SEK</g:price>
</g:shipping>
<g:shipping>
<g:country>SE</g:country>
<g:region>Skåne</g:region>
<g:service>Express</g:service>
<g:price></g:price>
</g:shipping>
<g:shipping>
<g:country>SE</g:country>
<g:region>Skåne</g:region>
<g:service>Express</g:service>
<g:price>5.00 SEK</g:price>
<g:min_handling_time>1</g:min_handling_time>
</g:shipping>
<g:shipping>
<g:country>SE</g:country>
<g:region>Skåne</g:region>
<g:service>Express</g:service>
<g:price>5.00 SEK</g:price>
<g:min_handling_time>1</g:min_handling_time>
<g:max_handling_time>2</g:max_handling_time>
</g:shipping>
<g:shipping>
<g:country>SE</g:country>
<g:region>Skåne</g:region>
<g:service>Express</g:service>
<g:price>5.00 SEK</g:price>
<g:min_handling_time>1</g:min_handling_time>
<g:max_handling_time>2</g:max_handling_time>
<g:min_transit_time>1</g:min_transit_time>
</g:shipping>
shipping(country:region:service:price:min_handling_time:max_handling_time:min_transit_time:max_transit_time)
SE:Skåne:Express:5.00 SEK:-1:2:1:3
shipping(country:region:service:price)
:Skåne:Express:5.00 SEK
shipping(country:region:service:price)
SE:Skåne:Express:
shipping(country:region:service:price:min_handling_time)
SE:Skåne:Express:5.00 SEK:1
shipping(country:region:service:price:min_handling_time:max_handling_time)
SE:Skåne:Express:5.00 SEK:1:2
shipping(country:region:service:price:min_handling_time:max_handling_time:min_transit_time)
SE:Skåne:Express:5.00 SEK:1:2:1
Properties
| Property | Value | Description |
|---|---|---|
| Data Type | List[Nested] | Closest data type in code |
| Nested | True | Defines if this field consists of one or more sub-fields |
| Case Sensitive | True | If small or large letters matter for this field |
| Repeatable | True | If you can supply multiple items of this field (it´s a list) |
| Repeatable limit | 100 | If a list, this specifices the max number of items |
Changelog
📅 2026-08-17
Documented how feed shipping and Business Center shipping relate to each other, and what happens to incomplete or invalid shipping entries.
Added a description of every sub-attribute, and clarified which errors discard a whole shipping entry and which only drop a single sub-attribute.
📅 2024-04-16
Added carrier and delivery_type support
📅 2022-12-07
Initial definition