Branded Brick Coasters: Custom Logo Coasters Built from Brick
A coaster is one of those objects that sits on a desk or a table every single day. It gets picked up, put down, and noticed by everyone who visits. A branded brick coaster does all of that while also being something nobody has seen before. Built from quality brick parts with your logo printed directly onto the centre tile, it arrives as a ready-to-build kit with instructions included. The recipient builds it themselves, which means they spend time with your brand and end up with something they’ve made rather than just received. It’s a branded experience as much as it is a product.
What a branded brick coaster is
Each coaster is built from brick parts, with a clean tile border surrounding a central printed tile carrying your logo, brand mark, or custom artwork. It comes as a complete kit with all the parts and building instructions included, so the recipient can build it themselves straight out of the box. The finished piece sits flat and smooth on a desk or table like any other coaster while looking nothing like one. They work as desk accessories, office gifts, hospitality pieces, and conference giveaways, and they order as easily as any other branded merchandise while arriving as something genuinely unexpected.
Your logo is printed directly onto the centre tile using an industrial UV printing process. The print is durable, precise, and applied directly to the part rather than using a sticker or transfer, so it won’t peel, fade, or lift with regular use. The surrounding brick border is available in a range of colours to complement your brand palette.
Who orders branded brick coasters
The most common buyers are businesses who want a branded desk accessory that doubles as a conversation piece. Hotels and hospitality venues ordering sets for guest rooms or meeting spaces. Offices equipping a new workspace or a client-facing environment. Marketing teams looking for a conference giveaway that won’t end up in a bin. Corporate gifting buyers who want something with genuine novelty value at a price point that makes bulk ordering straightforward.
They also work well as part of a wider branded merchandise set alongside other custom brick products, or as a standalone gift for a client or team member who you want to remember you every time they sit at their desk.
Pricing
Branded brick coasters are priced per unit with bulk discounts applied as quantity increases. A one-off design fee covers the creation of your branded tile artwork and is charged once regardless of how many units you order.
Quantity
Price per unit (GBP)
Price per unit (USD)
1 to 9
£25
$32
10 to 24
£22
$28
25 to 49
£19
$24
50 to 99
£16
$20
100+
£13
$16
A one-off design fee of £30 / $38 applies to all orders and covers the artwork setup for your branded tile. Every order is quoted before you commit to anything and there are no hidden costs. Shipping is included in your quote upfront and we deliver worldwide.
How to order
Get in touch with your logo file, your preferred border colour, and the quantity you need. We’ll come back to you with a quote and a render of the finished coaster before anything goes into production. You approve the design, we produce the order and ship it to you wherever you are in the world. If you’d like to understand the full process before getting in touch, our How It Works page walks you through every step.
There’s no minimum order quantity. You can order a single coaster to see how it looks in person before committing to a larger run, and the design fee applies only once so reordering at a later date costs only the per unit price.
Frequently asked questions
Is there a minimum order quantity?
No. You can order a single coaster or a production run of thousands. The design fee applies once regardless of quantity, and per unit pricing reduces as your order size increases.
What file format do you need for the logo?
Vector files give the best results for logos and brand marks. If you only have a high resolution image file, get in touch and we’ll advise on whether it will work before production begins.
Can I choose the border colour?
Yes. The brick border is available in a wide range of colours. Include your preference or your brand colour reference when you get in touch and we’ll confirm availability before quoting.
How durable is the printed tile?
The UV printing process produces a durable, direct print onto the tile surface. It won’t peel or lift with regular use and holds up well to normal desk and table use.
Can I reorder the same design later?
Yes. Once your design is created you can reorder at any point without paying the design fee again. Just get in touch with the quantity you need and we’ll process it straight away.
Do you ship internationally?
Yes, worldwide. Shipping is included in your quote upfront so there are no unexpected charges at delivery.
Can I order a sample before committing to a larger run?
Yes. Ordering a single unit first to see the finished product in person before placing a larger order is something we actively encourage. The design fee applies to the sample order and is not charged again when you reorder.
Get your branded brick coasters made
If you want a branded desk accessory that nobody else offers and that people actually keep, get in touch with your logo and we’ll take it from there.
Single units from £25 / $32. Bulk pricing from £13 / $16 per unit at 100 or more. One-off design fee of £30 / $38. Worldwide delivery included in your quote.
/* Auto generated, hash = 5dceu9kevqjdyuy2uw1atqrsu */
//TODO: Break this file down so that we can actually unit test it.
(function(window) {
/**
* Renders all unrendred LinkedIn Badges on the page
*/
window.LIRenderAll = function () {
var CALLBACK_NAME = 'LIBadgeCallback', //Must match callback on helpers.js
BADGE_NAMES = '.LI-profile-badge, .LI-entity-badge',
// TODO -- tracking param for other badge types
TRACKING_PARAM = 'profile-badge',
responsesReceived = 0, //Keeps track of number of responses recieved for proper cleanup when finished
expectedResponses = 0, //Keeps track of number of responses to expect
scripts = [ ], //Keeps track of scripts added for proper cleanup when finished
childScripts = {}, //Keeps track of child scripts to render
badges = Array.prototype.slice.call(document.querySelectorAll(BADGE_NAMES));
var i, len, badge, rendered;
for (i = 0, len = badges.length; i < len; i++) {
badge = badges[i];
rendered = badge.getAttribute('data-rendered');
if (!rendered) {
expectedResponses++;
badge.setAttribute('data-rendered', true);
renderBadge(badge);
}
}
function isCNDomain() {
if (typeof window !== "undefined") {
var hostName = window.location && window.location.hostname || '';
return (/linkedin(-ei)?.cn$/).test(hostName);
}
return false;
}
function generateUrl(isEI) {
var domainPrefix = isEI ? 'https://badges.linkedin-ei' : 'https://badges.linkedin';
if (isCNDomain()) {
return domainPrefix + ".cn/";
}
return domainPrefix + ".com/";
}
function getBadgeKeyQueryParams(badge) {
return Array.prototype.slice.call(badge.attributes).filter(function (attr) {
return attr.name.lastIndexOf('data-key-', 0) !== -1;
}).map(function (attr) {
// Most browsers automatically lowercase the attribute name when its being read
// We are calling lowercase on it again to ensure consistency for any browsers that are lagging behind.
return encodeURIComponent(attr.name.replace('data-', '').toLowerCase()) + '=' + encodeURIComponent(attr.value);
});
}
/*
* Renders a single badge on the page
* @param badge: div element of badge to render
*/
function renderBadge(badge) {
var size = badge.getAttribute('data-size'),
locale = badge.getAttribute('data-locale'),
type = badge.getAttribute('data-type'),
theme = badge.getAttribute('data-theme'),
vanity = badge.getAttribute('data-vanity'),
version = badge.getAttribute('data-version'),
isEI = badge.hasAttribute('data-ei'),
entity = badge.getAttribute('data-entity'),
isCreatePage = badge.hasAttribute('data-iscreate'),
uid = Math.round(1000000 * Math.random()),
baseUrl = generateUrl(isEI),
queryParams = [
'locale=' + encodeURIComponent(locale),
'badgetype=' + encodeURIComponent(type),
'badgetheme=' + encodeURIComponent(theme),
'uid=' + encodeURIComponent(uid),
'version=' + encodeURIComponent(version)
],
url;
if (version === 'v2') {
baseUrl += 'view';
queryParams.push('badgesize=' + encodeURIComponent(size));
queryParams.push('entity=' + encodeURIComponent(entity));
queryParams = queryParams.concat(getBadgeKeyQueryParams(badge));
} else {
baseUrl += 'profile';
queryParams.push('maxsize=' + encodeURIComponent(size));
queryParams.push('trk=' + encodeURIComponent(TRACKING_PARAM));
queryParams.push('vanityname=' + encodeURIComponent(vanity));
}
if (isCreatePage) {
queryParams.push('fromCreate=true');
}
url = baseUrl + '?' + queryParams.join('&');
badge.setAttribute('data-uid' , uid);
jsonp(url); //Calls responseHandler when done
}
/**
* Handles a response from the server. Finds badge matching badgeUid and inserts badgeHtml there
* @param badgeHtml: String representing contents of the badge
* @param badgeUid: UID of the badge to target
**/
function responseHandler(badgeHtml, badgeUid) {
responsesReceived ++;
var i, badge, uid, isCreate;
var defaultWidth = 330 // max possible width
var defaultHeight = 300 // max possible height
for (i = 0, len = badges.length; i < len; i++) {
badge = badges[i];
// isCreate needed to prevent reloading artdeco script tag
isCreate = badge.getAttribute('data-iscreate');
uid = parseInt(badge.getAttribute('data-uid'), 10);
if (uid === badgeUid) {
var badgeMarkup = `<body>${badgeHtml}</body>`
var iframe = document.createElement('iframe');
iframe.onload = function() {
var iframeBody = iframe.contentWindow.document.body;
// 5 px buffer to avoid the badge border being cut off.
iframe.setAttribute('height', (iframeBody.scrollHeight || defaultHeight) + 5);
iframe.setAttribute('width', (iframeBody.scrollWidth || defaultWidth) + 5);
};
iframe.setAttribute('frameBorder', '0');
iframe.style.display = 'block';
badge.appendChild(iframe);
iframe.contentWindow.document.open();
iframe.contentWindow.document.write(badgeMarkup);
iframe.contentWindow.document.close();
replaceScriptTags(badge, isCreate);
}
}
tryClean();
}
// These functions are needed because badge markup is added via innerHtml property which does not run script tags
function replaceScriptTags(node, isCreate) {
if (shouldReplaceNode(node, isCreate)) {
node.parentNode.replaceChild(cloneScriptNode(node), node);
childScripts[node.src] = true;
} else {
var i = 0,
children = node.childNodes;
while (i < children.length) {
replaceScriptTags(children[i++], isCreate);
}
}
return node;
}
function shouldReplaceNode(node, isCreate) {
return isScriptNode(node) && !childScripts[node.src] && (!isCreate || (isCreate && !node.getAttribute('data-isartdeco')));
}
function isScriptNode(node) {
return node.tagName === 'SCRIPT';
}
function cloneScriptNode(node){
var script = document.createElement("script");
for( var i = node.attributes.length-1; i >= 0; i-- ) {
script.setAttribute( node.attributes[i].name, node.attributes[i].value );
}
return script;
}
// Gets all incoming responses
window[CALLBACK_NAME] = responseHandler;
/**
* Tries to clean added tags
**/
function tryClean() {
//Clean up after all requests are done..
//Accounts for people including script more than once
var done = (responsesReceived >= expectedResponses && expectedResponses > 0) || responsesReceived >= badges.length;
if (done) {
delete window[CALLBACK_NAME];
// remove all script tags
scripts.map(function(script){
document.body.removeChild(script);
});
}
}
/*
* Makes Jsonp request, responses handles by CALLBACK_NAME
* @param url String: url of server to make request to
*/
function jsonp(url) {
var script = document.createElement('script');
script.src = url;
scripts.push(script);
document.body.appendChild(script);
}
};
if (document.readyState === 'complete') {
window.LIRenderAll();
} else {
window.addEventListener('load', window.LIRenderAll, false);
}
})(window);