I set up a wildlife surveying project from scratch: here’s what I learned

, 27 August 2026
I set up a wildlife surveying project from scratch: here’s what I learned
Louisa surveying for butterflies at Bramber Brooks © WHD

By Louisa Jones

Wilder Horsham District Project Support Officer

Have you glimpsed the sunny smudge of the Clouded Yellow? A peak in Painted Ladies? Or the gaggles of Gatekeepers braving the heat? This summer’s butterfly bonanza masks a worrying downward trend for 80% of our native species, according to Butterfly Conservation. How do we know this? The answer is citizen science: volunteers around the country channelling their delight in these winged creatures into data collection that feeds a growing body of evidence about their conservation status.

Citizen science is not rocket science: you can take part whatever your level of interest and experience. 

Usually, you’ll contribute to a ‘survey’: a standardised form of recording your wildlife encounters. This could be anything from uploading a photo from your weekend walk to regularly monitoring your local green space or seashore using more rigorous methods. Surveying can be an effective way to bring your community together towards a shared goal, while collecting evidence about the natural world around you.

This spring and summer, I set up a citizen science initiative to record the bird and butterfly species present on farms advised by the Wilder Horsham District team. I’ve learned a lot about what it takes to make your project a success from the get-go – and some things to avoid, too! 

Read on for some tips to help you get started on your wildlife surveying journey...

Our Youth Rangers invited the public to take part in a bioblitz of Brighton Pavilion gardens in 2026. © Katie Bell

1. Where are you going?

    Surveys are all about place, so choose yours well. Perhaps you have a plan to restore an overgrown neighbourhood space? Are you concerned about the effect of water pollution on local river wildlife? While many nationwide surveys take place in people’s gardens, if you’re organising your own on public or private property, you’ll need to gain the landowner’s permission first. It can take time and persistence to get the all-clear, so make sure to plan ahead. Think about how easy it is to access the survey site, especially if you’re hoping to attract large numbers of people from across your community.

    The Wilder Horsham District team trains volunteers and Horsham District Council rangers to carry out breeding bird surveys. © Louisa Jones

    2. What do you want to know?

      The huge number of survey methods available to you might seem bewildering, but don’t let the tail wag the dog. Forming some basic research questions will help you identify the variables – changeable factors – that you could measure. For example, Wilder Horsham District advises landowners on how to make their sites more nature friendly. We wanted to understand whether these new management practices were having the expected effect of (a) improving the range of wildlife present and (b) increasing the numbers of each species (known as abundance).

      Survey methods can be adapted to suit people with little pre-existing knowledge, including children. © Tamara Jewell

      3. Who’s your workforce?

        Pinning this down is a crucial part of your surveying equation. Think about numbers, experience level, availability and any special access needs. Are you organising a one-off mass-participation event for nature novices? You’ll need a method that’s quick, simple and supported by identification sheets and friendly experts, such as a bioblitz. Engaging young people with educational or work commitments might mean choosing a nocturnal species to survey, such as bats or moths. Remember that your workforce is made up of volunteers whose plans may change, so be ready for an inevitable drop-off in interest after the initial wave of sign-ups and arm yourself with a Plan B.

        Marine Conservation Officer, Sarah Ward, and Shoresearch volunteers survey marine vegetation using a quadrat. © Sam Roberts

        4. What methods should you use?

          Now you’ve narrowed down your variables and your workforce, it’s time to choose a methodology that’s both rigorous and realistic. Don’t try to reinvent the wheel: there are plenty of off-the-shelf techniques available from national recording societies, such as The Mammal Society (for mammals) or the British Society for Botanical Identification (for flowering plants). Not only have these been designed by experienced ecologists, but they also have the benefit of feeding into UK-wide databases that help shape government policy. Resist the urge to do too much too soon: gold-standard methods may require weekly site visits through the spring and summer to be considered valid or a level of training that might not be practical for many of your volunteers. Simpler surveys that involve uploading observations to the app, iRecord, might be a more sensible first step. Consider your first year as a pilot and be ready to learn from any challenges you experienced first time around.

          Wildlife recording apps like iNaturalist enable you to connect with and learn from a community of likeminded enthusiasts from around the world. © Roz Bassford

          5. Build your support network

            You may be surprised by how many experts will be happy to help you find your surveying feet. Because national recording societies have an interest in ensuring the data you collect for them is as accurate as possible, they will often have a dedicated support officer available. Your county records hub (such as Sussex Biodiversity Record Centre) can help connect you with local specialists and let you know how to feed your results into their database: this is a key element of any local citizen science project! For those looking to build a local group or initiative, Sussex Wildlife Trust runs free training for Wilder Community Leaders, which includes a combination of practical experience as well as how to find funding, manage risk and engage the people in your area. You can also download our comprehensive Guide to Wildlife Surveying and Monitoring.

            Follow these steps and you'll be ready to start your new adventure with confidence. Let us know how you get on!

            Leave a comment
            Time Δ Debug Message - Perch Runway 3.2
            1789277632.34530 [907] SELECT p.pagePath, pr.routePattern, pr.routeRegExp, p.pageTemplate, pr.routeOrder, s.settingValue AS siteOffline FROM swt_pages_staging p LEFT JOIN swt_page_routes pr ON p.pageID=pr.pageID LEFT JOIN swt_settings s ON s.settingID='siteOffline' UNION SELECT NULL AS pagePath, pr2.routePattern, pr2.routeRegExp, pr2.templatePath AS pageTemplate, pr2.routeOrder, NULL AS siteOffline FROM swt_page_routes pr2 WHERE templateID!=0 ORDER BY routeOrder ASC, pagePath ASC
            1789277632.38710.0418Matched route: news/[slug:s]
            1789277632.38720.0001Server address: 216.73.216.44
            1789277632.38720Using master page: /templates/pages/blog/post.php
            1789277632.38720Page arguments:
            Array
            (
                [0] => /news/i-set-up-a-wildlife-surveying-project-from-scratch-heres-what-i-learned
                [s] => i-set-up-a-wildlife-surveying-project-from-scratch-heres-what-i-learned
                [1] => i-set-up-a-wildlife-surveying-project-from-scratch-heres-what-i-learned
            )
            1789277632.38750.0003 [1] SELECT * FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
            1789277632.38870.0012 [86] SELECT DISTINCT settingID, settingValue FROM swt_settings WHERE userID=0
            1789277632.3910.0023 [1] SELECT locationID FROM swt_shop_tax_locations WHERE locationIsHome=1 LIMIT 1
            1789277632.39170.0007INSERT INTO swt_shop_cart(memberID,locationID,currencyID,cartPricing,cartProperties) VALUES(NULL,'1',47,'standard','[]')
            1789277632.39780.0061 [1] SELECT * FROM swt_shop_cart WHERE cartID=24972129
            1789277632.39870.0009 [1] SELECT * FROM swt_shop_cart WHERE cartID=24972129
            1789277632.39950.0008 [nil] SELECT * FROM swt_shop_sales WHERE saleFrom<='2026-09-13 05:33:00' AND saleTo>'2026-09-13 05:33:00' AND saleActive=1 AND saleDeleted IS NULL ORDER BY saleOrder ASC
            1789277632.40080.0013 [1] SELECT SQL_CALC_FOUND_ROWS DISTINCT tbl.* FROM ( SELECT idx.itemID, main.*, idx2.indexValue as sortval FROM swt_blog_index idx JOIN swt_blog_posts main ON idx.itemID=main.postID AND idx.itemKey='postID' JOIN swt_blog_index idx2 ON idx.itemID=idx2.itemID AND idx.itemKey='postID' AND idx2.indexKey='_id' WHERE 1=1 AND ((idx.indexKey='postSlug' AND idx.indexValue='i-set-up-a-wildlife-surveying-project-from-scratch-heres-what-i-learned')) AND idx.itemID=idx2.itemID AND idx.itemKey=idx2.itemKey GROUP BY idx.itemID, idx2.indexValue, postID ) as tbl WHERE (postStatus='Published' AND postDateTime<='2026-09-13 05:33:00' ) GROUP BY itemID, sortval ORDER BY sortval ASC LIMIT 0, 10
            1789277632.40370.003 [1] SELECT FOUND_ROWS() AS `count`
            1789277632.40450.0008 [1] SELECT * FROM swt_blog_posts WHERE postID=3991 AND postStatus='Published' AND postDateTime<='2026-09-13 05:33:00'
            1789277632.40580.0013 [13] SELECT * FROM swt_blog_sections ORDER BY sectionTitle ASC
            1789277632.40670.0009 [1] SELECT * FROM swt_blogs ORDER BY blogTitle ASC
            1789277632.40750.0008 [1] SELECT * FROM swt_categories WHERE catID=271 LIMIT 1
            1789277632.40820.0008 [1] SELECT * FROM swt_categories WHERE catID=50 LIMIT 1
            1789277632.40880.0005 [1] SELECT * FROM swt_categories WHERE catID=222 LIMIT 1
            1789277632.40950.0007Using template: /templates/blog/post.html
            1789277632.40960.0002 [162] SELECT catID, catPath FROM swt_categories
            1789277632.41080.0012 [1] SELECT * FROM swt_blog_posts WHERE postStatus='Published' AND postDateTime<='2026-09-13 05:33:00' AND postSlug='i-set-up-a-wildlife-surveying-project-from-scratch-heres-what-i-learned'
            1789277632.44170.0309Using template: /templates/blog/post.html
            1789277632.44230.0006 [250] SELECT country, countryID FROM swt_shop_countries WHERE countryActive=1 ORDER BY country ASC
            1789277632.44410.0018Using template: /templates/pages/attributes/seo.html
            1789277632.44430.0002 [1] SELECT regionID, regionTemplate, regionPage, regionRev AS rev FROM swt_content_regions WHERE regionKey='Banner image' AND (regionPage='/news/post' OR regionPage='*')
            1789277632.44530.001 [nil] SELECT * FROM ( SELECT idx.itemID, c.regionID, idx.pageID, c.itemJSON, idx2.indexValue as sortval FROM swt_content_index idx JOIN swt_content_items c ON idx.itemID=c.itemID AND idx.itemRev=c.itemRev AND idx.regionID=c.regionID JOIN swt_content_index idx2 ON idx.itemID=idx2.itemID AND idx.itemRev=idx2.itemRev AND idx2.indexKey='_order' WHERE ((idx.regionID=104 AND idx.itemRev=0)) AND idx.itemID=idx2.itemID AND idx.itemRev=idx2.itemRev ) as tbl GROUP BY itemID, pageID, itemJSON, sortval, regionID ORDER BY sortval ASC
            1789277632.4470.0017 [82] SELECT * FROM swt_pages_staging WHERE pageNew=0 AND pageHidden=0 AND pageDepth >=0 AND pageDepth<=2 ORDER BY pageTreePosition ASC
            1789277632.45120.0042 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
            1789277632.45190.0006 [2] SELECT pageID FROM swt_pages_staging WHERE pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition DESC
            1789277632.45460.0028Using template: /templates/navigation/ps_nav_template.html
            1789277632.45470 [6] Using template: /templates/navigation/ps_nav_template_children.html
            1789277632.45540.0007 [4] Using template: /templates/navigation/ps_nav_template_children.html
            1789277632.45570.0003 [29] Using template: /templates/navigation/ps_nav_template_children.html
            1789277632.45840.0026 [10] Using template: /templates/navigation/ps_nav_template_children.html
            1789277632.45940.001 [7] Using template: /templates/navigation/ps_nav_template_children.html
            1789277632.46010.0007 [9] Using template: /templates/navigation/ps_nav_template_children.html
            1789277632.46240.0023 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' OR pageSortPath='/news/post' LIMIT 1
            1789277632.46350.0011 [1] SELECT * FROM swt_pages_staging WHERE pageHidden=0 AND pageNew=0 AND pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition
            1789277632.46610.0026 [1] Using template: /templates/navigation/breadcrumbs.html
            1789277632.46660.0005Using template: /templates/blog/post.html
            1789277632.46680.0002 [1] SELECT * FROM swt_blog_authors WHERE authorID='33' LIMIT 1
            1789277632.46750.0007Using template: /templates/blog/author.html
            1789277632.46780.0003 [1] SELECT SQL_CALC_FOUND_ROWS DISTINCT tbl.* FROM ( SELECT idx.itemID, main.*, idx2.indexValue as sortval FROM swt_blog_index idx JOIN swt_blog_posts main ON idx.itemID=main.postID AND idx.itemKey='postID' JOIN swt_blog_index idx2 ON idx.itemID=idx2.itemID AND idx.itemKey='postID' AND idx2.indexKey='_id' WHERE 1=1 AND ((idx.indexKey='postSlug' AND idx.indexValue='i-set-up-a-wildlife-surveying-project-from-scratch-heres-what-i-learned')) AND idx.itemID=idx2.itemID AND idx.itemKey=idx2.itemKey GROUP BY idx.itemID, idx2.indexValue, postID ) as tbl WHERE (postStatus='Published' AND postDateTime<='2026-09-13 05:33:00' ) GROUP BY itemID, sortval ORDER BY sortval ASC LIMIT 0, 1
            1789277632.47130.0034 [1] SELECT FOUND_ROWS() AS `count`
            1789277632.47170.0005 [1] Using template: /templates/blog/post.html
            1789277632.47470.003Using template: /templates/blog/comment_form.html
            1789277632.47560.0009 [nil] SELECT * FROM swt_blog_comments WHERE 1=1 AND postID=3991 AND commentStatus='LIVE' ORDER BY FIELD(webmentionType, 'like', 'repost', 'comment', NULL) ASC, commentDateTime ASC
            1789277632.55770.0821 [0] Using template: /templates/blog/comment.html
            1789277632.5580.0002Using template: /templates/blog/post.html
            1789277632.55830.0003 [1] SELECT * FROM swt_blog_authors WHERE authorID='33' LIMIT 1
            1789277632.55910.0009 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pagePath='/what-we-do' OR pageSortPath='/what-we-do' LIMIT 1
            1789277632.55980.0007 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pageTreePosition='000-002' LIMIT 1
            1789277632.56050.0006 [7] SELECT * FROM swt_pages_staging WHERE pageNew=0 AND pageHidden=0 AND pageTreePosition LIKE '000-002%' AND pageDepth >=1 AND pageDepth<=2 ORDER BY pageTreePosition ASC
            1789277632.5630.0025 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
            1789277632.56370.0007 [2] SELECT pageID FROM swt_pages_staging WHERE pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition DESC
            1789277632.56680.0031 [6] Using template: /templates/navigation/footer-nav.html
            1789277632.56750.0008 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pagePath='/make-a-difference' OR pageSortPath='/make-a-difference' LIMIT 1
            1789277632.56850.0009 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pageTreePosition='000-005' LIMIT 1
            1789277632.56920.0007 [38] SELECT * FROM swt_pages_staging WHERE pageNew=0 AND pageHidden=0 AND pageTreePosition LIKE '000-005%' ORDER BY pageTreePosition ASC
            1789277632.57290.0037 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
            1789277632.57350.0006 [2] SELECT pageID FROM swt_pages_staging WHERE pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition DESC
            1789277632.57660.003 [10] Using template: /templates/navigation/footer-nav.html
            1789277632.57850.002 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pagePath='/visit' OR pageSortPath='/visit' LIMIT 1
            1789277632.57940.0008 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pageTreePosition='000-004' LIMIT 1
            1789277632.57980.0005 [30] SELECT * FROM swt_pages_staging WHERE pageNew=0 AND pageHidden=0 AND pageTreePosition LIKE '000-004%' AND pageDepth >=1 AND pageDepth<=2 ORDER BY pageTreePosition ASC
            1789277632.58310.0033 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
            1789277632.58380.0006 [2] SELECT pageID FROM swt_pages_staging WHERE pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition DESC
            1789277632.58660.0029 [29] Using template: /templates/navigation/footer-nav.html
            1789277632.58980.0031 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pagePath='/make-a-difference' OR pageSortPath='/make-a-difference' LIMIT 1
            1789277632.59070.001 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pageTreePosition='000-005' LIMIT 1
            1789277632.59140.0006 [11] SELECT * FROM swt_pages_staging WHERE pageNew=0 AND pageHidden=0 AND pageTreePosition LIKE '000-005%' AND pageDepth >=1 AND pageDepth<=2 ORDER BY pageTreePosition ASC
            1789277632.59460.0033 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
            1789277632.59530.0006 [2] SELECT pageID FROM swt_pages_staging WHERE pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition DESC
            1789277632.59810.0028 [10] Using template: /templates/navigation/footer-nav.html
            1789277632.59910.001Request time: 0.2558
            1789277632.59910Process time: 0.2555
            1789277632.59910Memory: 1.6563