If your pricing is a genuine advantage or your buyers are price-anchored shoppers, publish it — it pre-qualifies leads and earns trust. If every job is genuinely custom, publish structure instead: starting-at figures, ranges, or 'what drives the price' so visitors can self-locate.
What performs worst is total silence: 'contact us for pricing' reads as 'expensive and evasive' to a meaningful slice of modern buyers, who simply move to the competitor who gave them a number.
Whatever you choose, the claims-tracing rule applies: any number you publish must stay true. A stale price on your own site is the cheapest possible way to start a customer relationship with an apology.