Over 500+ Woodwork Machines Ready For Delivery.

Sawmilling Machines,
Solid Wood Machines,
Cut & Edge Machines


Largest Stock In Africa. Get a Quote Today!

High quality new and fully serviced pre-owned machines you can trust. Featuring top global brands like SCM, Weinig, Wadkin, Casolin, Casadei, Rhino and many more! Proudly South African company servicing woodworkers for over two decades.

Quality Woodwork Machinery
Woodwork machinery for sale
Certified Pre-owned Machines
Top Class Service and After Sales Support

Over 500 machines in stock & available For Delivery World Wide.

Get A Quote Fast!

Leave your details below and tell us what machines you’re looking for! We have over 450 machines in stock.

IGNORE THIS TEXT HIDDEN FORM HTML : 

 

<!DOCTYPE html>
<html lang=”en”>
<head>
<meta charset=”UTF-8″>
<meta name=”viewport” content=”width=device-width, initial-scale=1.0″>
<title>Machinery Inquiry</title>
<style>
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}

body {
font-family: Cambria, Georgia, serif;
background-color: #f8f8f8;
color: #333;
line-height: 1.6;
padding: 20px;
}

.form-container {
max-width: 800px;
margin: 0 auto;
background: white;
border-radius: 4px;
box-shadow: 0 2px 10px rgba(0,0,0,0.05);
padding: 30px;
}

.form-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
}

.form-row {
margin-bottom: 20px;
}

.full-width {
grid-column: 1 / -1;
}

.field-description {
display: block;
margin-bottom: 8px;
font-size: 15px;
color: #444;
}

.required::after {
content: ” *”;
color: #d32f2f;
}

.form-input, .form-textarea, .form-select {
width: 100%;
padding: 12px 15px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 15px;
font-family: Cambria, Georgia, serif;
background-color: #fff;
transition: border-color 0.2s;
}

.form-input:focus, .form-textarea:focus, .form-select:focus {
outline: none;
border-color: #888;
}

.form-textarea {
min-height: 120px;
resize: vertical;
}

.file-upload {
position: relative;
display: inline-block;
width: 100%;
}

.file-upload-label {
display: block;
padding: 12px 15px;
background: #f5f5f5;
border: 1px dashed #ccc;
border-radius: 4px;
text-align: center;
cursor: pointer;
transition: all 0.2s;
color: #666;
}

.file-upload-label:hover {
background: #eee;
border-color: #999;
}

.file-input {
position: absolute;
left: -9999px;
}

.file-info {
margin-top: 8px;
font-size: 13px;
color: #777;
}

.form-actions {
display: flex;
gap: 15px;
margin-top: 30px;
}

.btn {
padding: 12px 25px;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 15px;
font-family: Cambria, Georgia, serif;
cursor: pointer;
transition: all 0.2s;
background: #fff;
}

.btn-primary {
background: #333;
color: white;
border-color: #333;
flex: 1;
}

.btn-primary:hover {
background: #000;
}

.btn-secondary:hover {
background: #f5f5f5;
}

.error-message {
color: #d32f2f;
font-size: 13px;
margin-top: 5px;
display: none;
}

.form-input.error, .form-textarea.error, .form-select.error {
border-color: #d32f2f;
}

.file-item {
display: flex;
justify-content: space-between;
padding: 8px 12px;
background: #f9f9f9;
border: 1px solid #eee;
border-radius: 4px;
margin-top: 8px;
font-size: 14px;
}

/* Success Message Styles */
.success-message {
background: #f5f5f5;
border: 1px solid #ddd;
border-radius: 4px;
padding: 20px;
margin-bottom: 20px;
text-align: center;
display: none;
}

.success-icon {
font-size: 24px;
color: #12AA67;
margin-bottom: 10px;
}

@media (max-width: 768px) {
.form-grid {
grid-template-columns: 1fr;
}

.form-actions {
flex-direction: column;
}
}
</style>
</head>
<body>
<div class=”form-container”>
<!– Success Message –>
<div class=”success-message” id=”successMessage”>
<div class=”success-icon”>✓</div>
<h3>Thank You!</h3>
<p>Your inquiry has been submitted successfully. We will contact you shortly.</p>
</div>

<!– Zoho Form –>
<form id=’webform6016291000003546026′ method=’POST’ action=’https://crm.zoho.com/crm/WebToLeadForm’ accept-charset=’UTF-8′ enctype=’multipart/form-data’ target=’hiddenFrame’>
<!– Zoho Hidden Fields – DO NOT REMOVE –>
<input type=’hidden’ name=’xnQsjsdp’ value=’ff9264694434fbb46fe11212a908a6056661947c9afa5afb91ba4cb1cf010bde’>
<input type=’hidden’ name=’zc_gad’ value=”>
<input type=’hidden’ name=’xmIwtLD’ value=’17ea6b82361f86367996f5489a47461f05be8cbbaf4bd981b8b71ebf7bec9b64c0a850f44da4af26fa8ab6da07e95e8b’>
<input type=’hidden’ name=’actionType’ value=’TGVhZHM=’>
<input type=’hidden’ name=’returnURL’ value=”>
<input type=’hidden’ name=’ldeskuid’>
<input type=’hidden’ name=’LDTuvid’>
<input type=’hidden’ name=’aG9uZXlwb3Q’ value=”>

<!– FIXED: Submission URL Source – Using correct field name –>
<input type=’hidden’ name=’Submission_URL_Source’ id=’Submission_URL_Source’ value=”>

<input type=’hidden’ name=’LEADCF5′ value=’GFP’>
<input type=’hidden’ name=’Lead_Status’ value=’Not Contacted’>
<input type=’hidden’ name=’LEADCF4′ value=’Website’>

<!– Form Fields –>
<div class=”form-grid”>
<div class=”form-row”>
<span class=”field-description required”>Full name</span>
<input type=”text” name=”Last Name” class=”form-input” required maxlength=”80″>
<div class=”error-message” id=”lastNameError”>Please enter your full name</div>
</div>

<div class=”form-row”>
<span class=”field-description”>Company</span>
<input type=”text” name=”Company” class=”form-input” maxlength=”200″>
</div>

<div class=”form-row”>
<span class=”field-description”>Email address</span>
<input type=”email” name=”Email” class=”form-input” maxlength=”100″>
<div class=”error-message” id=”emailError”>Please enter a valid email address</div>
</div>

<div class=”form-row”>
<span class=”field-description required”>Mobile/WhatsApp number</span>
<input type=”tel” name=”Mobile” class=”form-input” required maxlength=”30″>
<div class=”error-message” id=”mobileError”>Please enter your mobile number</div>
</div>

<div class=”form-row full-width”>
<span class=”field-description required”>Machines you need</span>
<textarea name=”Description” class=”form-textarea” required></textarea>
<div class=”error-message” id=”descriptionError”>Please describe the machines you need</div>
</div>

<div class=”form-row full-width”>
<span class=”field-description”>Share images, videos or files</span>
<div class=”file-upload”>
<label for=”theFile6016291000003546026″ class=”file-upload-label”>
<span>Click to select files</span>
</label>
<input type=”file” id=”theFile6016291000003546026″ class=”file-input” name=”theFile” multiple>
</div>
<div class=”file-info”>You can upload up to 3 files. Maximum file size is 20MB.</div>
<div id=”fileList” class=”file-list”></div>
</div>
</div>

<div class=”form-actions”>
<button type=”submit” class=”btn btn-primary” id=”submitBtn”>Submit inquiry</button>
<button type=”reset” class=”btn btn-secondary”>Clear form</button>
</div>
</form>

<!– Hidden iframe for form submission –>
<iframe name=”hiddenFrame” style=”display: none;”></iframe>
</div>

<script>
// Set submission URL immediately when page loads
document.addEventListener(‘DOMContentLoaded’, function() {
console.log(‘Setting submission URL:’, window.location.href);

// Multiple ways to set the URL to ensure it works
const urlField = document.getElementById(‘Submission_URL_Source’);
if (urlField) {
urlField.value = window.location.href;
console.log(‘URL field value set to:’, urlField.value);
}

// Also set it on form submission as a backup
const form = document.getElementById(‘webform6016291000003546026’);
const fileInput = document.getElementById(‘theFile6016291000003546026’);
const fileList = document.getElementById(‘fileList’);
const submitBtn = document.getElementById(‘submitBtn’);
const successMessage = document.getElementById(‘successMessage’);

// File upload handling
fileInput.addEventListener(‘change’, function() {
fileList.innerHTML = ”;
const files = Array.from(this.files);

if (files.length > 3) {
alert(‘You can upload a maximum of 3 files.’);
this.value = ”;
return;
}

let totalSize = 0;
files.forEach(file => {
totalSize += file.size;

const fileItem = document.createElement(‘div’);
fileItem.className = ‘file-item’;
fileItem.innerHTML = `
<span>${file.name}</span>
<span>(${(file.size / 1024 / 1024).toFixed(2)} MB)</span>
`;
fileList.appendChild(fileItem);
});

if (totalSize > 20 * 1024 * 1024) {
alert(‘Total file size exceeds 20MB limit.’);
this.value = ”;
fileList.innerHTML = ”;
}
});

// Form submission handling
form.addEventListener(‘submit’, function(e) {
console.log(‘Form submitted from URL:’, window.location.href);

// Double-check URL is set before submission
const urlField = document.getElementById(‘Submission_URL_Source’);
if (urlField && !urlField.value) {
urlField.value = window.location.href;
}

// Reset previous errors
document.querySelectorAll(‘.error-message’).forEach(el => {
el.style.display = ‘none’;
});
document.querySelectorAll(‘.form-input, .form-textarea’).forEach(el => {
el.classList.remove(‘error’);
});

let isValid = true;

// Validate required fields
const fullName = form.querySelector(‘[name=”Last Name”]’);
if (!fullName.value.trim()) {
document.getElementById(‘lastNameError’).style.display = ‘block’;
fullName.classList.add(‘error’);
isValid = false;
}

const mobile = form.querySelector(‘[name=”Mobile”]’);
if (!mobile.value.trim()) {
document.getElementById(‘mobileError’).style.display = ‘block’;
mobile.classList.add(‘error’);
isValid = false;
}

const description = form.querySelector(‘[name=”Description”]’);
if (!description.value.trim()) {
document.getElementById(‘descriptionError’).style.display = ‘block’;
description.classList.add(‘error’);
isValid = false;
}

// Validate email if provided
const email = form.querySelector(‘[name=”Email”]’);
if (email.value.trim() && !isValidEmail(email.value)) {
document.getElementById(’emailError’).style.display = ‘block’;
email.classList.add(‘error’);
isValid = false;
}

if (!isValid) {
e.preventDefault();
return;
}

// Change button text to show loading state
submitBtn.textContent = ‘Submitting…’;
submitBtn.disabled = true;

// Set a timeout to show success message
setTimeout(function() {
showSuccessMessage();
form.reset();
fileList.innerHTML = ”;
submitBtn.textContent = ‘Submit inquiry’;
submitBtn.disabled = false;
}, 1500);
});

function showSuccessMessage() {
successMessage.style.display = ‘block’;
form.style.display = ‘none’;
window.scrollTo({ top: 0, behavior: ‘smooth’ });
}

// Email validation function
function isValidEmail(email) {
const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return re.test(String(email).toLowerCase());
}
});

// Alternative method: Set URL immediately after DOM is ready
window.addEventListener(‘load’, function() {
const urlField = document.getElementById(‘Submission_URL_Source’);
if (urlField) {
urlField.value = window.location.href;
console.log(‘URL set on window load:’, urlField.value);
}
});
</script>
</body>
</html>

25 Years of Satisfied Customers Throughout the World.

Ready To Order Your Machine?

Easy communication with our sales reps! Get quotes, inquiries, orders all via WhatsApp.

Come visit our showroom and view our machines and factory size for yourself.

Immediate response to our sales team. Our office line is : (011) 948 7934 

Easy communication with our sales reps! Get quotes, inquiries, orders all via WhatsApp.

Come visit our showroom and view our machines and factory size for yourself.

Immediate response to our sales team. Our office line is : (011) 948 7934 

Conveniently Located In Johannesburg, South Africa 🇿🇦

Collection from O.R. Tambo Airport

We will gladly arrange airport collection where needed. Our premises is about 35 to 45 minutes from the aiport when traffic is light.

About 15 minutes from Jorburg City Centre

We are only a short drive south of the Johannesburg city centre. Simply follow the M1 south.

About 1 Hour from Pretoria

When traffic is light we are a 1 hour drive from Pretoria. Please provide for extra time when travelling during high traffic hours.

Follow Us On Social media

Top Quality Machines

For ultimate peace of mind we offer a quality guarantee on all our machines. 3 Month quality guarantee on all pre-owned machines, and 6 months to 2 years on all new machines. We stock some of the best brands in the industry that will last long and keep your production going.

Expert Engineers

GFP Machines has the best technical team around, with well over 35 years of industry experience. When it comes to machine inspection and servicing we provide quality that is some of the best on the continent. At GFP Machines we take pride in the quality of our work and service.

Delivery In Africa

We supply machines through the world but especially throughout sub-saharan Africa. We frequently assist our customers to start-up workshops and production facilities. We have sent machines to Zambia, Namibia, Botswana, Mozambique, Tanzania, kenya, Democratic republic of Congo and Much more!

At GFP Machines

Woodworking is in our DNA

Founder and CEO, Gys Potgieter, has been a woodworker since the age of 14 years old. He has owned several wood product factories and recently followed his passion to launch Kuni, making hand-crafted and one-of-a-kind wood creations. Few know woodworking and product manufacturing as well as he does. Gys, together with our professional sales team, have a wealth of experience and expertise in the woodworking field.

We are always happy to chat over a cup of coffee and share production advice to our valued customer. With a long history in the woodworking industry, we know the right machine for the job, and most importantly; the machines we sell are the ones we would use ourselves.

"Come visit us for a cup of fresh coffee at our premises in Johannesburg. Our range is huge, come see for yourself.
Gys Potgieter
CEO